Issue #20538: UTF-7 incremental decoder produced inconsistant string when
input was truncated in BASE64 section.
This commit is contained in:
commit
6cbf151032
|
@ -124,8 +124,6 @@ class ReadTest(MixInCheckStateHandling):
|
|||
"".join(codecs.iterdecode([bytes([c]) for c in encoded], self.encoding))
|
||||
)
|
||||
|
||||
# Temporary skip, see http://bugs.python.org/issue20542
|
||||
@unittest.skip
|
||||
def test_readline(self):
|
||||
def getreader(input):
|
||||
stream = io.BytesIO(input.encode(self.encoding))
|
||||
|
@ -899,13 +897,40 @@ class UTF7Test(ReadTest, unittest.TestCase):
|
|||
|
||||
def test_partial(self):
|
||||
self.check_partial(
|
||||
"a+-b",
|
||||
'a+-b\x00c\x80d\u0100e\U00010000f',
|
||||
[
|
||||
"a",
|
||||
"a",
|
||||
"a+",
|
||||
"a+-",
|
||||
"a+-b",
|
||||
'a',
|
||||
'a',
|
||||
'a+',
|
||||
'a+-',
|
||||
'a+-b',
|
||||
'a+-b',
|
||||
'a+-b',
|
||||
'a+-b',
|
||||
'a+-b',
|
||||
'a+-b\x00',
|
||||
'a+-b\x00c',
|
||||
'a+-b\x00c',
|
||||
'a+-b\x00c',
|
||||
'a+-b\x00c',
|
||||
'a+-b\x00c',
|
||||
'a+-b\x00c\x80',
|
||||
'a+-b\x00c\x80d',
|
||||
'a+-b\x00c\x80d',
|
||||
'a+-b\x00c\x80d',
|
||||
'a+-b\x00c\x80d',
|
||||
'a+-b\x00c\x80d',
|
||||
'a+-b\x00c\x80d\u0100',
|
||||
'a+-b\x00c\x80d\u0100e',
|
||||
'a+-b\x00c\x80d\u0100e',
|
||||
'a+-b\x00c\x80d\u0100e',
|
||||
'a+-b\x00c\x80d\u0100e',
|
||||
'a+-b\x00c\x80d\u0100e',
|
||||
'a+-b\x00c\x80d\u0100e',
|
||||
'a+-b\x00c\x80d\u0100e',
|
||||
'a+-b\x00c\x80d\u0100e',
|
||||
'a+-b\x00c\x80d\u0100e\U00010000',
|
||||
'a+-b\x00c\x80d\u0100e\U00010000f',
|
||||
]
|
||||
)
|
||||
|
||||
|
|
|
@ -10,6 +10,9 @@ Release date: 2014-02-09
|
|||
Core and Builtins
|
||||
-----------------
|
||||
|
||||
- Issue #20538: UTF-7 incremental decoder produced inconsistant string when
|
||||
input was truncated in BASE64 section.
|
||||
|
||||
- Issue #20404: io.TextIOWrapper (and hence the open() builtin) now uses the
|
||||
internal codec marking system added for issue #19619 to throw LookupError
|
||||
for known non-text encodings at stream construction time. The existing
|
||||
|
|
|
@ -4459,8 +4459,16 @@ utf7Error:
|
|||
/* return state */
|
||||
if (consumed) {
|
||||
if (inShift) {
|
||||
writer.pos = shiftOutStart; /* back off output */
|
||||
*consumed = startinpos;
|
||||
if (writer.pos != shiftOutStart && writer.maxchar > 127) {
|
||||
PyObject *result = PyUnicode_FromKindAndData(
|
||||
writer.kind, writer.data, shiftOutStart);
|
||||
Py_XDECREF(errorHandler);
|
||||
Py_XDECREF(exc);
|
||||
_PyUnicodeWriter_Dealloc(&writer);
|
||||
return result;
|
||||
}
|
||||
writer.pos = shiftOutStart; /* back off output */
|
||||
}
|
||||
else {
|
||||
*consumed = s-starts;
|
||||
|
|
Loading…
Reference in New Issue