| 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 | |
|---|
| | 74 | class 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) |
|---|