diff options
author | Serhiy Storchaka <storchaka@gmail.com> | 2014-02-08 12:06:33 (GMT) |
---|---|---|
committer | Serhiy Storchaka <storchaka@gmail.com> | 2014-02-08 12:06:33 (GMT) |
commit | 6cbf151032d693e13bb880aa3781dd06b7662199 (patch) | |
tree | 625f4868170708231d01d09b20d51e82730f997d /Objects | |
parent | 73afe2a972e30a3e0f87401be2fa38c67e2cb964 (diff) | |
parent | 016a3f33a533bdec6977639bfa83b7f93f6c8c88 (diff) | |
download | cpython-6cbf151032d693e13bb880aa3781dd06b7662199.zip cpython-6cbf151032d693e13bb880aa3781dd06b7662199.tar.gz cpython-6cbf151032d693e13bb880aa3781dd06b7662199.tar.bz2 |
Issue #20538: UTF-7 incremental decoder produced inconsistant string when
input was truncated in BASE64 section.
Diffstat (limited to 'Objects')
-rw-r--r-- | Objects/unicodeobject.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c index 02359e5..7a1aa16 100644 --- a/Objects/unicodeobject.c +++ b/Objects/unicodeobject.c @@ -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; |