summaryrefslogtreecommitdiffstats
path: root/Objects
diff options
context:
space:
mode:
authorSerhiy Storchaka <storchaka@gmail.com>2014-02-08 12:06:33 (GMT)
committerSerhiy Storchaka <storchaka@gmail.com>2014-02-08 12:06:33 (GMT)
commit6cbf151032d693e13bb880aa3781dd06b7662199 (patch)
tree625f4868170708231d01d09b20d51e82730f997d /Objects
parent73afe2a972e30a3e0f87401be2fa38c67e2cb964 (diff)
parent016a3f33a533bdec6977639bfa83b7f93f6c8c88 (diff)
downloadcpython-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.c10
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;