1
0
Fork 1
mirror of https://github.com/coddingtonbear/django-mailbox.git synced 2026-07-09 22:38:19 +02:00

fix message.text exception when attachment filename header contains weird characters

Add failing test for bad header character

fix

add comment
This commit is contained in:
Adam Reisinger 2024-04-25 12:22:30 +02:00
parent 376bcff6bf
commit 488c726c2d
4 changed files with 339 additions and 2 deletions

2
.gitignore vendored
View file

@ -11,7 +11,7 @@ include/*
dummy_project/* dummy_project/*
.cache/ .cache/
.tox/ .tox/
messages /messages
*.sqlite3 *.sqlite3
.idea/ .idea/
venv/ venv/

View file

@ -0,0 +1,327 @@
Received: from AS2PR02MB9809.eurprd02.prod.outlook.com (2603:10a6:20b:60e::20)
by DB7PR02MB4362.eurprd02.prod.outlook.com with HTTPS; Tue, 23 Apr 2024
10:38:27 +0000
Received: from AM9PR02MB6609.eurprd02.prod.outlook.com (2603:10a6:20b:2cd::7)
by AS2PR02MB9809.eurprd02.prod.outlook.com (2603:10a6:20b:60e::20) with
Microsoft SMTP Server (version=TLS1_2,
cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7472.44; Tue, 23 Apr
2024 10:38:26 +0000
Received: from AM9PR02MB6609.eurprd02.prod.outlook.com
([fe80::7817:da99:60d5:c2cd]) by AM9PR02MB6609.eurprd02.prod.outlook.com
([fe80::7817:da99:60d5:c2cd%4]) with mapi id 15.20.7472.044; Tue, 23 Apr 2024
10:38:26 +0000
From: =?iso-8859-2?Q?Reisinger_=C1d=E1m?= <Reisinger.Adam@example.com>
To: joker <joker@example.com>
Subject: bad character attachment
Thread-Topic: bad character attachment
Thread-Index: AQHalWpdT02RNiNo9EacvmR/jo7DDw==
Date: Tue, 23 Apr 2024 10:38:26 +0000
Message-ID:
<AM9PR02MB6609243F575793E9C226F261E8112@AM9PR02MB6609.eurprd02.prod.outlook.com>
Accept-Language: hu-HU, en-US
Content-Language: hu-HU
X-MS-Exchange-Organization-AuthAs: Internal
X-MS-Exchange-Organization-AuthMechanism: 04
X-MS-Exchange-Organization-AuthSource: AM9PR02MB6609.eurprd02.prod.outlook.com
X-MS-Has-Attach: yes
X-MS-Exchange-Organization-Network-Message-Id:
147665cf-d7eb-4c28-b097-08dc63818214
X-MS-Exchange-Organization-SCL: 1
X-MS-TNEF-Correlator:
X-MS-Exchange-Organization-RecordReviewCfmType: 0
msip_labels:
x-ms-publictraffictype: Email
X-Microsoft-Antispam-Mailbox-Delivery:
ucf:0;jmr:0;auth:0;dest:I;ENG:(910001)(944506478)(944626604)(920097)(425001)(930097)(140003);
X-Microsoft-Antispam-Message-Info:
08cyAXtTqqbGjtpbn1kW31yhay8HShE6HN5oST8t4yG798I/SC/mIep7IhbjU82ryLShiVefj/nbbMKifLEwMLQ8hl6aYuUvCvJTsLTaObuEdBoUirN4rljRDAual3lWKnKZ0lY8i+AzRruOvTPLsEwZklByndJTSdTneAlaVEdyAs7/oxgpctrO9sy1Ye1VU+W0W2Etv8KjOOZOLH3M0tuDgIZOmJTXNw8t5tS6RfnMgX0U+n44W3DwmgR2UVUH23vuQU0snX8eOHsw21OKNNM3jP3D2aFhr6djzQv3XnrcVKKX2sRS5TT8IVDEGhckkFtSgYStvDeg4mtUHZnm6z2Nl62d8K4VbOP7CmMAufs+TTySs0yz82ZVy+PVluUclcDljI1hIQcXCucz29+J6Me5T/2zXm0e/Am6x9zhH5BrevK7VmbPjV4OnW81r4u6btoaQNKRAlb5Ye9l1pHKEO00l91RwBPVf/gGw3zOU/B1CFreHZyb61kY2eHfOGOZstB5kzYZZ8NCnX9YLSF5vQ==
Content-Type: multipart/mixed;
boundary="_004_AM9PR02MB6609243F575793E9C226F261E8112AM9PR02MB6609eurp_"
MIME-Version: 1.0
--_004_AM9PR02MB6609243F575793E9C226F261E8112AM9PR02MB6609eurp_
Content-Type: multipart/alternative;
boundary="_000_AM9PR02MB6609243F575793E9C226F261E8112AM9PR02MB6609eurp_"
--_000_AM9PR02MB6609243F575793E9C226F261E8112AM9PR02MB6609eurp_
Content-Type: text/plain; charset="iso-8859-2"
Content-Transfer-Encoding: quoted-printable
test message
--_000_AM9PR02MB6609243F575793E9C226F261E8112AM9PR02MB6609eurp_
Content-Type: text/html; charset="iso-8859-2"
Content-Transfer-Encoding: quoted-printable
<html>
<head>
<meta http-equiv=3D"Content-Type" content=3D"text/html; charset=3Diso-8859-=
2">
<style type=3D"text/css" style=3D"display:none;"> P {margin-top:0;margin-bo=
ttom:0;} </style>
</head>
<body dir=3D"ltr">
<div class=3D"elementToProof" style=3D"font-family: Aptos, Aptos_EmbeddedFo=
nt, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 11pt; c=
olor: rgb(0, 0, 0);">
test message</div>
</body>
</html>
--_000_AM9PR02MB6609243F575793E9C226F261E8112AM9PR02MB6609eurp_--
--_004_AM9PR02MB6609243F575793E9C226F261E8112AM9PR02MB6609eurp_
Content-Type: application/pdf; name="K<>relem.pdf"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="K<>relem.pdf"
JVBERi0xLjMKJcTl8uXrp/Og0MTGCjMgMCBvYmoKPDwgL0ZpbHRlciAvRmxhdGVEZWNvZGUgL0xl
bmd0aCAxODYgPj4Kc3RyZWFtCngBjZA9C8IwEIb3/IrX70QxTa5f6aq4uBVus04FB6FD6f8Hk1TB
KoJkuMvluOe59KjRIzkOFu0AE8/Q+pLRlI33kFiHgqyuCG2HAyMfO30gypEXFbgTCTPBgm+4QM7m
CnujU8iF8sMs5DLEDHIVH3xhHRNf8a1X8BknjjY/0OITnZlg5MonHxO+p9k0YDcvSiODAEE2Solo
slVwuoLcTXr+UPn6hYJS7cpoIrh7Mwnb8n3crH4Ap2JIHQplbmRzdHJlYW0KZW5kb2JqCjEgMCBv
YmoKPDwgL1R5cGUgL1BhZ2UgL1BhcmVudCAyIDAgUiAvUmVzb3VyY2VzIDQgMCBSIC9Db250ZW50
cyAzIDAgUiAvTWVkaWFCb3ggWzAgMCA1OTUgODQyXQo+PgplbmRvYmoKNCAwIG9iago8PCAvUHJv
Y1NldCBbIC9QREYgL1RleHQgXSAvQ29sb3JTcGFjZSA8PCAvQ3MxIDUgMCBSID4+IC9Gb250IDw8
IC9UVDIgNyAwIFIKPj4gPj4KZW5kb2JqCjggMCBvYmoKPDwgL04gMyAvQWx0ZXJuYXRlIC9EZXZp
Y2VSR0IgL0xlbmd0aCAyNjEyIC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4AZ2Wd1RT
2RaHz703vdASIiAl9Bp6CSDSO0gVBFGJSYBQAoaEJnZEBUYUESlWZFTAAUeHImNFFAuDgmLXCfIQ
UMbBUURF5d2MawnvrTXz3pr9x1nf2ee319ln733XugBQ/IIEwnRYAYA0oVgU7uvBXBITy8T3AhgQ
AQ5YAcDhZmYER/hEAtT8vT2ZmahIxrP27i6AZLvbLL9QJnPW/3+RIjdDJAYACkXVNjx+JhflApRT
s8UZMv8EyvSVKTKGMTIWoQmirCLjxK9s9qfmK7vJmJcm5KEaWc4ZvDSejLtQ3pol4aOMBKFcmCXg
Z6N8B2W9VEmaAOX3KNPT+JxMADAUmV/M5yahbIkyRRQZ7onyAgAIlMQ5vHIOi/k5aJ4AeKZn5IoE
iUliphHXmGnl6Mhm+vGzU/liMSuUw03hiHhMz/S0DI4wF4Cvb5ZFASVZbZloke2tHO3tWdbmaPm/
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
6qTqgRqPmua96nu37Z3ax9vXv99tf9MBjQPFBz4eFBy8f8j3UGutQW3FYdzhrMPP66Lqur9nf19/
RO1I8ZHPR4VHpcfCj3XVO9TXN6g3lDbCjZLGseNxx2/94PVDexOr6VAzo7n4BDghOfHix/gf754M
PNl5in2q6Sf9n/a20FqKWqHW3NaJtqQ2aXtMe9/pgNOdHc4dLT+b/3z0jPaZmrPKZ0vPkc4VnJs5
n3d+8kLGhfGLiReHOld0Prq05NKdrrCu3suBl69e8blyqdu9+/xVl6tnrjldO32dfb3thv2N1h67
npZf7H5p6bXvbb3pcLP9luOtjr4Ffef6Xfsv3va6feWO/50bA4sG+u4uvnv/Xtw96X3e/dEHqQ9e
P8x6OP1o/WPs46InCk8qnqo/rf3V+Ndmqb307KDXYM+ziGePhrhDL/+V+a9PwwXPqc8rRrRG6ket
R8+M+YzderH0xfDLjJfT44W/Kf6295XRq59+d/u9Z2LJxPBr0euZP0reqL45+tb2bedk6OTTd2nv
pqeK3qu+P/aB/aH7Y/THkensT/hPlZ+NP3d8CfzyeCZtZubf94Tz+wplbmRzdHJlYW0KZW5kb2Jq
CjUgMCBvYmoKWyAvSUNDQmFzZWQgOCAwIFIgXQplbmRvYmoKMiAwIG9iago8PCAvVHlwZSAvUGFn
ZXMgL01lZGlhQm94IFswIDAgNTk1IDg0Ml0gL0NvdW50IDEgL0tpZHMgWyAxIDAgUiBdID4+CmVu
ZG9iago5IDAgb2JqCjw8IC9UeXBlIC9DYXRhbG9nIC9QYWdlcyAyIDAgUiA+PgplbmRvYmoKNyAw
IG9iago8PCAvVHlwZSAvRm9udCAvU3VidHlwZSAvVHJ1ZVR5cGUgL0Jhc2VGb250IC9BQUFBQUMr
Q2FsaWJyaSAvRm9udERlc2NyaXB0b3IKMTAgMCBSIC9Ub1VuaWNvZGUgMTEgMCBSIC9GaXJzdENo
YXIgMzMgL0xhc3RDaGFyIDQzIC9XaWR0aHMgWyA4NTUgNTI3IDQyMwo0NTUgMjI2IDUyNSA1MjUg
Nzk5IDQ5OCA1MjUgMzM1IF0gPj4KZW5kb2JqCjExIDAgb2JqCjw8IC9MZW5ndGggMjkyIC9GaWx0
ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4AV2Ry2rEIBSG9z7FWU4XQ0zm1kIIlCkDWfRC0z5A
oidBaIwYs8jb99dOp9DFt/g8/no8Zuf6qbYmUPbmJ9VwoN5Y7XmeFq+YOh6MFXlB2qhwtbSmxtaJ
DOFmnQOPte0nKktBlL0jMge/0uZRTx3fxbVXr9kbO9Dm89yklWZx7otHtoGkqCrS3OO459a9tCNT
lqLbWqNuwrpF6m/Hx+qY0BES+U9LatI8u1axb+3AopSyKi+XSrDV/0r5NdH1161FXpURKfe6EmVR
QIGUxz7qDgqgu6h7KIB2UQ9QIGUhox6hANV91BMUSHk6RL2HAlTTRQ9QAE3VFgqgHDd3UIAsjsIz
fvuNL4qTv01KLd5jSOl70vziXIzl2w+6ycUDEt/ospCPCmVuZHN0cmVhbQplbmRvYmoKMTAgMCBv
YmoKPDwgL1R5cGUgL0ZvbnREZXNjcmlwdG9yIC9Gb250TmFtZSAvQUFBQUFDK0NhbGlicmkgL0Zs
YWdzIDQgL0ZvbnRCQm94IFstNTAzIC0zMTMgMTI0MCAxMDI2XQovSXRhbGljQW5nbGUgMCAvQXNj
ZW50IDk1MiAvRGVzY2VudCAtMjY5IC9DYXBIZWlnaHQgNjMyIC9TdGVtViAwIC9YSGVpZ2h0CjQ2
NCAvQXZnV2lkdGggNTIxIC9NYXhXaWR0aCAxMzI4IC9Gb250RmlsZTIgMTIgMCBSID4+CmVuZG9i
agoxMiAwIG9iago8PCAvTGVuZ3RoMSAxODc0MCAvTGVuZ3RoIDkyMDUgL0ZpbHRlciAvRmxhdGVE
ZWNvZGUgPj4Kc3RyZWFtCngB1Xt5XFNX+v65NysJgQQIBAIkGAE1IK4IbkRZZHEBJRpQlF1UVARx
X6ja2tLaZWpt7Wo32xm6XKJWtIu20+k23deZbmNnOtOOrd2m7bS2yvc5982h2JnO94/f5/f5zDfk
yfO873nPuee8Z7nXgGvbO5uYmXUxDRvVsLKujamv3EWgkQ3r1rrJTitgTPdIc9vSlWRngCzepa0b
m8nOvZexyOUtTXWNZLMfwdktcJAtjQMPbVm5dgPZubyBUa2rG0LluVfATlhZtyF0ffYubPequpVN
FF8Sw+229qZQuRRAc59Q2X/4lFAWziqYTo2RmZVlsd2MRWXL41UPL9ePHXt72C3nlkRO/obFG1X3
w59seZ6LN/Z1N/9w9lxX2KfGbJhhTFaLGUM9w63n3mbMdOCHs2cPhH3KPRe8wnvDNNPmyc/IT7Ec
5pKfDvF7LEd+m/nlP4LfAv8hxG+C34D9Ovg18KvgV8AnwI+BHwU/wvxMK7/DxgGVgGZANcK6C3gd
0LEVaEliZtSXWIz8BCsAGoG1wF5Ah9jHUHYXWpSYW951OMwhlbr75J1C7BDiIiG6hNguxDYhtgqx
RYjNQmwSYqMQG4RYL8Q6ITqFWCtEhxBrhGgTYrUQq4RYKUSrECuEWC7EMiFahFgqRLMQTUI0CtEg
RL0QdULUCrFEiMVC1AixSIiFQlQLUSVEQIgFQswXwi9EpRDzhJgrRIUQ5ULMEWK2ELOEmClEmRCl
QpQIUSzEDCGKhCgUokCIfCGmCzFNCJ8QeUJMFWKKEJOFmCTERCFyhcgRYoIQ2UKMF2KcEGOFGCPE
aCFGCZElxEghMoXIEMIrxAghhgsxTIh0IdKESBViqBAeIYYIkSKEWwiXEMlCJAmRKIRTiAQh4oVw
CBEnRKwQdiFihIgWIkoImxBWISKFiBDCIkS4EGYhTEKECWEUwiCEXgidEFohNELIQkhCsJCQ+oU4
L8Q5IX4U4gchzgrxvRDfCfFPIb4V4hshvhbiH0J8JcSXQnwhxOdCfCbEGSE+FeITIU4L8XchPhbi
IyH+JsRfhfhQiL8I8WchPhDilBB/EuJ9Id4T4l0h3hHibSH+KMQfhHhLiDeFeEOI14V4TYhXhXhF
iJeFeEmIF4V4QYjnhfi9EM8J8awQzwjxtBBPCfE7IZ4U4rdCPCHE40KcFOKEEI8J8agQjwjxsBDH
hTgmRJ8QR4V4SIgjQhwW4pAQQSF6hVCEeFCIB4S4X4j7hOgR4jdC/FqIe4W4R4iDQtwtxF1C3CnE
HULcLsQBIW4T4lYhbhHiZiFuEuJGIfYLcYMQ1wuxT4jrhNgrxLVC/EqIa4S4WoirhLhSiD1CXCHE
5UJ0C3GZEJcKsVuIS4S4WIhdQuwUYocQFwnRJcR2IbYJsVWILUJsFmKTEBuF2CDEeiHWCdEpxFoh
OoRoF2KNEG1CrBZilRArhWgVYoUQy4VYJkSLEEuFaBaiSYhGIRqEqBeiTohaIZYIsViIGiEWCbFQ
iGohqoQICLFAiPlC+IWoFGKeEHOFKBdijhCzhZgpRJkQpUKUCFEsxAwhioQoFKJAiPxD/Gm5T94V
TJ7qwjNzMNkO2kHWRcHkibC6yNpOtC2YHA7nVrK2EG0m2kS0MZg0DSEbgkn5oPVE64g6qWwtWR1E
7eRcE0yajgptRKuJVlHISqJWohXBxEJELidaRtRCtJSoOZhYgJAmshqJGojqieqIaomWEC2mejVk
LSJaSFRNVEUUIFpANJ/IT1RJNI9oLlEFUTnRHKLZRLOIZhKVEZUGnSUYQwlRcdBZCmsGUVHQWQar
MOicCSogyieaTmXTqJ6PKI/qTSWaQjSZIicRTaTquUQ5RBOIsonGU2PjiMZSK2OIRhONosayiEZS
vUyiDCIv0Qii4UTDiNKp6TSiVGpzKJGHaAg1nULkpnouomSiJKJEIidRQjBhNpIVT+QIJsyBFUcU
S047UQw5o4miiGxUZiWKJGcEkYUonMrMRCaiMCozEhmI9MH4clxdF4yvAGmJNOSUyZKImEpSP9F5
NUQ6R9aPRD8QnaWy78n6juifRN8SfRN0VLr6pK+Djnmgf5D1FdGXRF9Q2edkfUZ0huhTKvuE6DQ5
/070MdFHRH+jkL+S9SFZfyHrz0QfEJ2isj8RvU/O94jeJXqH6G0K+SNZfyB6Kxi3AEN5Mxg3H/QG
0evkfI3oVaJXiF6mkJeIXiTnC0TPE/2e6DkKeZboGXI+TfQU0e+IniT6LUU+QdbjRCeJTlDZY0SP
kvMRooeJjhMdI+qjyKNkPUR0hOgw0aFgbB4GHQzGLgT1EilEDxI9QHQ/0X1EPUS/Ccbi1Jd+Ta3c
S3QPlR0kupvoLqI7ie4gup3oANFt1Nit1MotRDdT2U1ENxLtJ7qBKlxP1j6i64j2Utm11MqviK6h
squJriK6kmgP0RUUeTlZ3USXEV1KtJvokqC9DmO/OGivB+0i2hm0N8PaQXRR0O6H1RW042YjbQ/a
s0HbiLZS9S1UbzPRpqC9ESEbqfoGovVE64g6idYSdVDT7VR9DVFb0N6AVlZTY6sociVRK9EKouVE
y6heC9FS6lkzVW8iaqTIBqJ6ojqiWqIlRItp0DXUs0VEC2nQ1dR0FV0oQLSAujufLuSnViqJ5hHN
JaoIxvgwsPJgDE/rnGAM37CzgzE7QbOCMZmgmRRSRlQajMGDhFRCVjHRDHIWBWO2oawwGLMbVBCM
2Q7KD8Z0gaYHo4pA04h8RHlEU4NReC6QppA1OWirgjWJaGLQxvdRLlFO0DYD1oSgLQDKDtqqQeOp
bBzR2KAtA84xFDk6aOMDGxW08QMpi2gkVc+kK2QQeamxEUTDqbFhROlEaUSpQRvP0lAiD7U5hNpM
ocbc1IqLKJnqJRElEjmJEojig9YatOkIWheD4oLWJaBYIjtRDFE0URRVsFEFKzkjiSKILEThFGmm
SBM5w4iMRAYiPUXqKFJLTg2RTCQRMV9/ZL2L43xkg+tcZKPrR+gfgLPA9/B9B98/gW+Bb4Cv4f8H
8BXKvoT9BfA58BlwBv5PgU9Qdhr234GPgY+Av0Usdf01osX1IfAX4M/AB/CdAv8JeB94D/a74HeA
t4E/An+wrHC9ZRntehP8hqXV9bolzfUa8Cr0Kxav62XgJeBFlL8A3/OWla7fQz8H/Sz0M5blrqct
y1xPWVpcv7MsdT2Jur9Fe08AjwO+/pP4PAE8Bjwavsb1SHi76+HwDtfx8LWuY0AfcBT+h4AjKDuM
skPwBYFeQAEeNG90PWDe5LrfvMV1n3mrq8e8zfUb4NfAvcA9wEHgbnOm6y7wncAdqHM7+IB5hes2
6FuhbwFuhr4Jbd2ItvajrRvgux7YB1wH7AWuBX6FetegvatNs11Xmea4rjQtde0x3e26wnSP62JN
qmuXJse1U8px7fB3+S/q6fJv92/1b+vZ6jdvlcxbnVvLtm7e2rP1na2+KL1pi3+Tf3PPJv9G/3r/
hp71/uPyJaxZvtg32b+up9Ov7YzpXNup+bpT6umUCjqlUZ2SzDqtne5OTfhaf7u/o6fdz9rL27va
lXbtJKX9VLvM2iVTX//JQ+3O5CKwb0u7xVq0xr/a39az2r+qeaV/OTq4LGepv6Vnqb85p9Hf1NPo
b8ip99fl1PqX5NT4F/fU+BflVPsX9lT7q3IC/gWIn59T6ff3VPrn5VT45/ZU+OfkzPbPhn9WTpl/
Zk+ZvzSn2F/SU+yfkVPkL8TgWaI10Z2osfIOzE5ET5hTmj7K6XOecn7h1DKn4jzp1ERFJrgS5OGR
8VL+nHhpdfz2+KviNZGOlxyyzzE8oygy7qW4P8V9HqeN9sUNH1nEYq2x7liNnY8tdlYlH9uh2LwC
4tHj1bG6Yj1pRZF2KdLussuFn9ulS5hGcksSk6wgjRF1Dkt2V5HmUbjwyzImSVezSm9Zn5HNLVOM
5QsV6VIldR7/9FVUK/pLFeavXhjolaQrq3olOb9SiSmrqCb74j17WNL0MiVpXiCoOXAgaXpVmdLF
tc+n6n6uGUKqvIs7Oju8Ad8UZjtl+8KmsZ+wvmSVIyOlyMj+SNkXic5HRrgiZP7RH6HxRYyeUBRp
cVlk/tFv0cT6LPDwVKaHl1cWRZpdZtmfZ55jln3mvPwinzlzVNG/jPMQHydd2bt2cYcXcq1XfcOq
kjq5iRdK8O5YC5v/gGAzXvLLLwpD3JIOvNRmqPlfrvJ/oET6P9DH//Iu9jJskcC0fnkXfpe5E9gB
XAR0AduBbcBWYAuwGdgEbAQ2AOuBdUAnsBboANYAbcBqYBWwEmgFVgDLgWVAC7AUaAaagEagAagH
6oBaYAmwGKgBFgELgWqgCggAC4D5gB+oBOYBc4EKoByYA8wGZgEzgTKgFCgBioEZQBFQCBQA+cB0
YBrgA/KAqcAUYDIwCZgI5AI5wAQgGxgPjAPGAmOA0cAoIAsYCWQCGYAXGAEMB4YB6UAakAoMBTzA
ECAFcAMuIBlIAhIBJ5AAxAMOIA6IBexADBANRAE2wApEAhGABQgHzIAJCAOMgAHQAzpAO60fnxpA
BiSAsUYJPuk8cA74EfgBOAt8D3wH/BP4FvgG+Br4B/AV8CXwBfA58BlwBvgU+AQ4Dfwd+Bj4CPgb
8FfgQ+AvwJ+BD4BTwJ+A94H3gHeBd4C3gT8CfwDeAt4E3gBeB14DXgVeAV4GXgJeBF4Angd+DzwH
PAs8AzwNPAX8DngS+C3wBPA4cBI4ATwGPAo8AjwMHAeOAX3AUeAh4AhwGDgEBIFeQAEeBB4A7gfu
A3qA3wC/Bu4F7gEOAncDdwF3AncAtwMHgNuAW4FbgJuBm4Abgf3ADcD1wD7gOmAvcC3wK+Aa4Grg
KuBKYA9wBXA50A1cBlwK7AYuAS5mjdO6pF1QO4EdwEVAF7Ad2AZsBbYAm4FNwEZgA7AeWAd0AmuB
DqAdWAO0AauBVcBKoBVYASwHlgEtwFKgGWgCGoEGoB6oA2qBJcBioAZYBCwEqoEqIAAsAOYDfqAS
mAfMBcqBOcBsYCZQBpQCJUAxMAMoAgqBAiCfNf6XH9P/7d2r+m/v4H95/xh/LBt4MOOddSxZjD98
MtzK2PlrL/gLqHK2nHWwLvxcwvawa9kJ9g6rZzuh9rMD7CD7NVPY4+xZ9tYFtf4fjfMbdStZuOYo
07NoxvrP9p85fxDo00UM8lwLK1rr/snTb+3/7Ge+z85f228936ePYia1rkV+Fa39QzrXfxa3XD2z
9GdzW94NHale6UvDrecfPH/PBQMox9+eVbOFbBGrYbWsDuNvZC1sGTKzgrWylWyVaq1C2VLoZlhL
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
5T3K6BhZMmrqln9N9PWzqjfPTPkpvZGzfpbeC5KJJNYy3Av488v7yGI0S2fPqnlMzBsuDYuShtuk
NIuUFi6lGaU0gzRCIw2XpWSeNCQKrK5rsHpMgdWTXy1H0pL5gZ+cZZJMMfyJMoanNIbfW2KikNcY
nteY4/ijKjxRHo1ks9ownfF9khSMLPXgSaVXh1uBugNqQitePNzwsyn0cvZG8iqHWyNLdbxSsBW1
cOiriZXEM2LoNmtQ13sETqZk9QFG8/7EjvvbV9+9Kju3474O8IQHnFOXzylZVpDizFs+p3h5gVv6
66pjl5RN33a4HVwK3lKyoz533JIds0p31OWOW7yDnzwp/Z/LK7X3s4nsMp67w8OZzZMZyo3KGDJY
XXBgNXcqIwGZ/IgJj7NknvEUJ1nOxBWPxjNEr4GG/gJfVGNDTx0vPKk+0KHpM62IjfPFWc60xhUb
eIVgK2qow06wviAWlVb9d4vNMyRtPE/AWPWTH8z20PHswVN0rHiSk1care7hI+OKGn1J2yKjdEaL
cas4pT8yhodpoyI/mjAjbmhijFEXptMuTBpijQjTp5Z1zJYj3EOjE2yGNw2I0oaFQ9gSooe6z5tq
loSZwnQRDuRoL3+W0zwysE9d2J3mdL7T0vkmSzciF+nqiZrO9246jtWHGD9WmYtnEnFgNYPg79Tb
Hhf8Hy48QDi+IIf0vS8sOrMk3ayLL8GRqPvpgQ63u4HnOa/49wk90IWFKkTwGoMf43idweemeIob
eHyzqQsqe8KAA89vUUn2uCSbftY+dUMaYtwO/LvDGJdVPGrq5kI8x+GfIVFhA/t0vX/25KWX1ctD
xEl37us5S/JTA365U3jwYIuXxKIA/tLjN7psGn/le/PrWpfVty/7Hz0DYJwKZW5kc3RyZWFtCmVu
ZG9iagoxMyAwIG9iago8PCAvVGl0bGUgKE1pY3Jvc29mdCBXb3JkIC0gRG9jdW1lbnQxKSAvUHJv
ZHVjZXIgKG1hY09TIFZlcnNpb24gMTMuMyBcKEJ1aWxkIDIyRTI1MlwpIFF1YXJ0eiBQREZDb250
ZXh0KQovQ3JlYXRvciAoV29yZCkgL0NyZWF0aW9uRGF0ZSAoRDoyMDIzMDUzMTE0MTgwM1owMCcw
MCcpIC9Nb2REYXRlIChEOjIwMjMwNTMxMTQxODAzWjAwJzAwJykKPj4KZW5kb2JqCnhyZWYKMCAx
NAowMDAwMDAwMDAwIDY1NTM1IGYgCjAwMDAwMDAyODAgMDAwMDAgbiAKMDAwMDAwMzIyOCAwMDAw
MCBuIAowMDAwMDAwMDIyIDAwMDAwIG4gCjAwMDAwMDAzODQgMDAwMDAgbiAKMDAwMDAwMzE5MyAw
MDAwMCBuIAowMDAwMDAwMDAwIDAwMDAwIG4gCjAwMDAwMDMzNjAgMDAwMDAgbiAKMDAwMDAwMDQ4
MSAwMDAwMCBuIAowMDAwMDAzMzExIDAwMDAwIG4gCjAwMDAwMDM5MjcgMDAwMDAgbiAKMDAwMDAw
MzU2MiAwMDAwMCBuIAowMDAwMDA0MTYzIDAwMDAwIG4gCjAwMDAwMTM0NTcgMDAwMDAgbiAKdHJh
aWxlcgo8PCAvU2l6ZSAxNCAvUm9vdCA5IDAgUiAvSW5mbyAxMyAwIFIgL0lEIFsgPGI5NDg3NDQ4
OWJkZjc2YWU2MjQzNmY0ZjlhNDZlN2ViPgo8Yjk0ODc0NDg5YmRmNzZhZTYyNDM2ZjRmOWE0NmU3
ZWI+IF0gPj4Kc3RhcnR4cmVmCjEzNjcyCiUlRU9GCg==
--_004_AM9PR02MB6609243F575793E9C226F261E8112AM9PR02MB6609eurp_--

View file

@ -446,3 +446,13 @@ class TestProcessEmail(EmailMessageTestCase):
with gzip.open(msg.eml.name, 'rb') as f: with gzip.open(msg.eml.name, 'rb') as f:
self.assertEqual(f.read(), self.assertEqual(f.read(),
self._get_email_as_text('generic_message.eml')) self._get_email_as_text('generic_message.eml'))
def test_message_bad_character_in_attachment_filename(self):
'''
Regression test for handling weird characters in attachment filename headers.
Previously accessing msg.text threw an exception.
'''
message = self._get_email_object('bad_character_attachment.eml')
msg = self.mailbox.process_incoming_message(message)
self.assertIsNotNone(msg.text)

View file

@ -103,7 +103,7 @@ def get_body_from_message(message, maintype, subtype):
""" """
body = '' body = ''
for part in message.walk(): for part in message.walk():
if part.get('content-disposition', '').startswith('attachment;'): if convert_header_to_unicode(part.get('content-disposition', '')).startswith('attachment;'):
continue continue
if part.get_content_maintype() == maintype and \ if part.get_content_maintype() == maintype and \
part.get_content_subtype() == subtype: part.get_content_subtype() == subtype: