mirror of
https://github.com/python/cpython.git
synced 2025-10-08 16:11:51 +00:00
Merge: #17369: Improve handling of broken RFC2231 values in get_filename.
This commit is contained in:
commit
c489e83432
3 changed files with 28 additions and 0 deletions
|
@ -347,6 +347,10 @@ def collapse_rfc2231_value(value, errors='replace',
|
||||||
# object. We do not want bytes() normal utf-8 decoder, we want a straight
|
# object. We do not want bytes() normal utf-8 decoder, we want a straight
|
||||||
# interpretation of the string as character bytes.
|
# interpretation of the string as character bytes.
|
||||||
charset, language, text = value
|
charset, language, text = value
|
||||||
|
if charset is None:
|
||||||
|
# Issue 17369: if charset/lang is None, decode_rfc2231 couldn't parse
|
||||||
|
# the value, so use the fallback_charset.
|
||||||
|
charset = fallback_charset
|
||||||
rawbytes = bytes(text, 'raw-unicode-escape')
|
rawbytes = bytes(text, 'raw-unicode-escape')
|
||||||
try:
|
try:
|
||||||
return str(rawbytes, charset, errors)
|
return str(rawbytes, charset, errors)
|
||||||
|
|
|
@ -5052,6 +5052,26 @@ Content-Type: application/x-foo; name*0=\"Frank's\"; name*1=\" Document\"
|
||||||
self.assertNotIsInstance(param, tuple)
|
self.assertNotIsInstance(param, tuple)
|
||||||
self.assertEqual(param, "Frank's Document")
|
self.assertEqual(param, "Frank's Document")
|
||||||
|
|
||||||
|
def test_rfc2231_missing_tick(self):
|
||||||
|
m = '''\
|
||||||
|
Content-Disposition: inline;
|
||||||
|
\tfilename*0*="'This%20is%20broken";
|
||||||
|
'''
|
||||||
|
msg = email.message_from_string(m)
|
||||||
|
self.assertEqual(
|
||||||
|
msg.get_filename(),
|
||||||
|
"'This is broken")
|
||||||
|
|
||||||
|
def test_rfc2231_missing_tick_with_encoded_non_ascii(self):
|
||||||
|
m = '''\
|
||||||
|
Content-Disposition: inline;
|
||||||
|
\tfilename*0*="'This%20is%E2broken";
|
||||||
|
'''
|
||||||
|
msg = email.message_from_string(m)
|
||||||
|
self.assertEqual(
|
||||||
|
msg.get_filename(),
|
||||||
|
"'This is\ufffdbroken")
|
||||||
|
|
||||||
# test_headerregistry.TestContentTypeHeader.rfc2231_single_quote_in_value_with_charset_and_lang
|
# test_headerregistry.TestContentTypeHeader.rfc2231_single_quote_in_value_with_charset_and_lang
|
||||||
def test_rfc2231_tick_attack_extended(self):
|
def test_rfc2231_tick_attack_extended(self):
|
||||||
eq = self.assertEqual
|
eq = self.assertEqual
|
||||||
|
|
|
@ -24,6 +24,10 @@ Core and Builtins
|
||||||
Library
|
Library
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
- Issue #17369: get_filename was raising an exception if the filename
|
||||||
|
parameter's RFC2231 encoding was broken in certain ways. This was
|
||||||
|
a regression relative to python2.
|
||||||
|
|
||||||
- Issue #20013: Some imap servers disconnect if the current mailbox is
|
- Issue #20013: Some imap servers disconnect if the current mailbox is
|
||||||
deleted, and imaplib did not handle that case gracefully. Now it
|
deleted, and imaplib did not handle that case gracefully. Now it
|
||||||
handles the 'bye' correctly.
|
handles the 'bye' correctly.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue