Django

Code

Changeset 5582

Show
Ignore:
Timestamp:
07/01/07 01:32:34 (1 year ago)
Author:
mtredinnick
Message:

Backported the fix from [5581] (unicode-branch) to trunk. Fixes a method
resolution order problem when setting email headers.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • django/trunk/django/core/mail.py

    r5553 r5582  
    6363    pass 
    6464 
    65 class SafeHeaderMixin(object): 
     65class SafeMIMEText(MIMEText): 
    6666    def __setitem__(self, name, val): 
    6767        "Forbids multi-line headers, to prevent header injection." 
     
    7070        if name == "Subject": 
    7171            val = Header(val, settings.DEFAULT_CHARSET) 
    72         # Note: using super() here is safe; any __setitem__ overrides must use 
    73         # the same argument signature. 
    74         super(SafeHeaderMixin, self).__setitem__(name, val) 
    75  
    76 class SafeMIMEText(MIMEText, SafeHeaderMixin): 
    77     pass 
    78  
    79 class SafeMIMEMultipart(MIMEMultipart, SafeHeaderMixin): 
    80     pass 
     72        MIMEText.__setitem__(self, name, val) 
     73 
     74class SafeMIMEMultipart(MIMEMultipart): 
     75    def __setitem__(self, name, val): 
     76        "Forbids multi-line headers, to prevent header injection." 
     77        if '\n' in val or '\r' in val: 
     78            raise BadHeaderError, "Header values can't contain newlines (got %r for header %r)" % (val, name) 
     79        if name == "Subject": 
     80            val = Header(val, settings.DEFAULT_CHARSET) 
     81        MIMEMultipart.__setitem__(self, name, val) 
    8182 
    8283class SMTPConnection(object):