1
0
mirror of https://github.com/django/django.git synced 2025-07-04 09:49:12 +00:00

unicode: Fixed a method resolution order (mro) problem introduced in [5547]

that broke non-ASCII email headers.


git-svn-id: http://code.djangoproject.com/svn/django/branches/unicode@5581 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Malcolm Tredinnick 2007-07-01 06:27:07 +00:00
parent a61d4ebd5f
commit 5eb53a6397

View File

@ -63,7 +63,7 @@ def make_msgid(idstring=None):
class BadHeaderError(ValueError): class BadHeaderError(ValueError):
pass pass
class SafeHeaderMixin(object): class SafeMIMEText(MIMEText):
def __setitem__(self, name, val): def __setitem__(self, name, val):
"Forbids multi-line headers, to prevent header injection." "Forbids multi-line headers, to prevent header injection."
if '\n' in val or '\r' in val: if '\n' in val or '\r' in val:
@ -80,15 +80,26 @@ class SafeHeaderMixin(object):
val = ', '.join(result) val = ', '.join(result)
else: else:
val = Header(force_unicode(val), settings.DEFAULT_CHARSET) val = Header(force_unicode(val), settings.DEFAULT_CHARSET)
# Note: using super() here is safe; any __setitem__ overrides must use MIMEText.__setitem__(self, name, val)
# the same argument signature.
super(SafeHeaderMixin, self).__setitem__(name, val)
class SafeMIMEText(MIMEText, SafeHeaderMixin): class SafeMIMEMultipart(MIMEMultipart):
pass def __setitem__(self, name, val):
"Forbids multi-line headers, to prevent header injection."
class SafeMIMEMultipart(MIMEMultipart, SafeHeaderMixin): if '\n' in val or '\r' in val:
pass raise BadHeaderError, "Header values can't contain newlines (got %r for header %r)" % (val, name)
try:
val = str(force_unicode(val))
except UnicodeEncodeError:
if name.lower() in ('to', 'from', 'cc'):
result = []
for item in val.split(', '):
nm, addr = parseaddr(item)
nm = str(Header(nm, settings.DEFAULT_CHARSET))
result.append(formataddr((nm, str(addr))))
val = ', '.join(result)
else:
val = Header(force_unicode(val), settings.DEFAULT_CHARSET)
MIMEMultipart.__setitem__(self, name, val)
class SMTPConnection(object): class SMTPConnection(object):
""" """