Django

Code

Changeset 8083

Show
Ignore:
Timestamp:
07/25/08 22:37:25 (4 months ago)
Author:
mtredinnick
Message:

Fixed #7574 -- Fixed the handling of lazy translation in email headers.

Files:

Legend:

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

    r7864 r8083  
    7272def forbid_multi_line_headers(name, val): 
    7373    """Forbids multi-line headers, to prevent header injection.""" 
     74    val = force_unicode(val) 
    7475    if '\n' in val or '\r' in val: 
    7576        raise BadHeaderError("Header values can't contain newlines (got %r for header %r)" % (val, name)) 
    7677    try: 
    77         val = force_unicode(val).encode('ascii') 
     78        val = val.encode('ascii') 
    7879    except UnicodeEncodeError: 
    7980        if name.lower() in ('to', 'from', 'cc'): 
     
    8586            val = ', '.join(result) 
    8687        else: 
    87             val = Header(force_unicode(val), settings.DEFAULT_CHARSET) 
     88            val = Header(val, settings.DEFAULT_CHARSET) 
    8889    return name, val 
    8990 
  • django/trunk/tests/regressiontests/mail/tests.py

    r7975 r8083  
    44 
    55>>> from django.core.mail import EmailMessage 
     6>>> from django.utils.translation import ugettext_lazy 
    67 
    78# Test normal ascii character case: 
     
    3738Traceback (most recent call last): 
    3839    ... 
    39 BadHeaderError: Header values can't contain newlines (got 'Subject\nInjection Test' for header 'Subject') 
     40BadHeaderError: Header values can't contain newlines (got u'Subject\nInjection Test' for header 'Subject') 
     41 
     42>>> email = EmailMessage(ugettext_lazy('Subject\nInjection Test'), 'Content', 'from@example.com', ['to@example.com']) 
     43>>> message = email.message() 
     44Traceback (most recent call last): 
     45    ... 
     46BadHeaderError: Header values can't contain newlines (got u'Subject\nInjection Test' for header 'Subject') 
    4047 
    4148"""