Skip to content

Commit 244651a

Browse files
committed
Merged revisions 72283-72284 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk ........ r72283 | antoine.pitrou | 2009-05-04 20:32:32 +0200 (lun., 04 mai 2009) | 4 lines Issue python#4426: The UTF-7 decoder was too strict and didn't accept some legal sequences. Patch by Nick Barnes and Victor Stinner. ........ r72284 | antoine.pitrou | 2009-05-04 20:32:50 +0200 (lun., 04 mai 2009) | 3 lines Add Nick Barnes to ACKS. ........
1 parent 375c019 commit 244651a

5 files changed

Lines changed: 266 additions & 189 deletions

File tree

Include/unicodeobject.h

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -858,10 +858,8 @@ PyAPI_FUNC(PyObject*) PyUnicode_DecodeUTF7Stateful(
858858
PyAPI_FUNC(PyObject*) PyUnicode_EncodeUTF7(
859859
const Py_UNICODE *data, /* Unicode char buffer */
860860
Py_ssize_t length, /* number of Py_UNICODE chars to encode */
861-
int encodeSetO, /* force the encoder to encode characters in
862-
Set O, as described in RFC2152 */
863-
int encodeWhiteSpace, /* force the encoder to encode space, tab,
864-
carriage return and linefeed characters */
861+
int base64SetO, /* Encode RFC2152 Set O characters in base64 */
862+
int base64WhiteSpace, /* Encode whitespace (sp, ht, nl, cr) in base64 */
865863
const char *errors /* error handling */
866864
);
867865

Lib/test/test_unicode.py

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -867,19 +867,31 @@ def test_codecs_utf7(self):
867867
('+?', b'+-?'),
868868
(r'\\?', b'+AFwAXA?'),
869869
(r'\\\?', b'+AFwAXABc?'),
870-
(r'++--', b'+-+---')
870+
(r'++--', b'+-+---'),
871+
('\U000abcde', b'+2m/c3g-'), # surrogate pairs
872+
('/', b'/'),
871873
]
872874

873875
for (x, y) in utfTests:
874876
self.assertEqual(x.encode('utf-7'), y)
875877

876-
# surrogates not supported
878+
# Unpaired surrogates not supported
877879
self.assertRaises(UnicodeError, str, b'+3ADYAA-', 'utf-7')
878880

879-
self.assertEqual(str(b'+3ADYAA-', 'utf-7', 'replace'), '\ufffd')
881+
self.assertEqual(str(b'+3ADYAA-', 'utf-7', 'replace'), '\ufffd\ufffd')
880882

881883
# Issue #2242: crash on some Windows/MSVC versions
882-
self.assertRaises(UnicodeDecodeError, b'+\xc1'.decode, 'utf-7')
884+
self.assertEqual(b'+\xc1'.decode('utf-7'), '\xc1')
885+
886+
# Direct encoded characters
887+
set_d = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'(),-./:?"
888+
# Optional direct characters
889+
set_o = '!"#$%&*;<=>@[]^_`{|}'
890+
for c in set_d:
891+
self.assertEqual(c.encode('utf7'), c.encode('ascii'))
892+
self.assertEqual(c.encode('ascii').decode('utf7'), c)
893+
for c in set_o:
894+
self.assertEqual(c.encode('ascii').decode('utf7'), c)
883895

884896
def test_codecs_utf8(self):
885897
self.assertEqual(''.encode('utf-8'), b'')

Misc/ACKS

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ Luigi Ballabio
3535
Jeff Balogh
3636
Michael J. Barber
3737
Chris Barker
38+
Nick Barnes
3839
Quentin Barnes
3940
Richard Barran
4041
Cesar Eduardo Barros

Misc/NEWS

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@ What's New in Python 3.1 beta 1?
1212
Core and Builtins
1313
-----------------
1414

15+
- Issue #4426: The UTF-7 decoder was too strict and didn't accept some legal
16+
sequences. Patch by Nick Barnes and Victor Stinner.
17+
1518
- Issue #3672: Reject surrogates in utf-8 codec; add surrogates error handler.
1619

1720
- Issue #5883: In the io module, the BufferedIOBase and TextIOBase ABCs have

0 commit comments

Comments
 (0)