mirror of
https://github.com/python/cpython.git
synced 2025-07-15 23:35:23 +00:00
Merged revisions 59056-59076 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk ........ r59064 | christian.heimes | 2007-11-20 02:48:48 +0100 (Tue, 20 Nov 2007) | 1 line Fixed bug #1470 ........ r59066 | martin.v.loewis | 2007-11-20 03:46:02 +0100 (Tue, 20 Nov 2007) | 2 lines Patch #1468: Package Lib/test/*.pem. ........ r59068 | christian.heimes | 2007-11-20 04:21:02 +0100 (Tue, 20 Nov 2007) | 1 line Another fix for test_shutil. Martin pointed out that it breaks some build bots ........ r59073 | nick.coghlan | 2007-11-20 15:55:57 +0100 (Tue, 20 Nov 2007) | 1 line Backport some main.c cleanup from the py3k branch ........ r59076 | amaury.forgeotdarc | 2007-11-21 00:31:27 +0100 (Wed, 21 Nov 2007) | 6 lines The incremental decoder for utf-7 must preserve its state between calls. Solves issue1460. Might not be a backport candidate: a new API function was added, and some code may rely on details in utf-7.py. ........
This commit is contained in:
parent
81e8ab5ba0
commit
5d14c2b8f8
6 changed files with 61 additions and 22 deletions
|
@ -1518,6 +1518,14 @@ char utf7_special[128] = {
|
|||
PyObject *PyUnicode_DecodeUTF7(const char *s,
|
||||
Py_ssize_t size,
|
||||
const char *errors)
|
||||
{
|
||||
return PyUnicode_DecodeUTF7Stateful(s, size, errors, NULL);
|
||||
}
|
||||
|
||||
PyObject *PyUnicode_DecodeUTF7Stateful(const char *s,
|
||||
Py_ssize_t size,
|
||||
const char *errors,
|
||||
Py_ssize_t *consumed)
|
||||
{
|
||||
const char *starts = s;
|
||||
Py_ssize_t startinpos;
|
||||
|
@ -1537,8 +1545,11 @@ PyObject *PyUnicode_DecodeUTF7(const char *s,
|
|||
unicode = _PyUnicode_New(size);
|
||||
if (!unicode)
|
||||
return NULL;
|
||||
if (size == 0)
|
||||
if (size == 0) {
|
||||
if (consumed)
|
||||
*consumed = 0;
|
||||
return (PyObject *)unicode;
|
||||
}
|
||||
|
||||
p = unicode->str;
|
||||
e = s + size;
|
||||
|
@ -1624,7 +1635,7 @@ PyObject *PyUnicode_DecodeUTF7(const char *s,
|
|||
goto onError;
|
||||
}
|
||||
|
||||
if (inShift) {
|
||||
if (inShift && !consumed) {
|
||||
outpos = p-PyUnicode_AS_UNICODE(unicode);
|
||||
endinpos = size;
|
||||
if (unicode_decode_call_errorhandler(
|
||||
|
@ -1636,6 +1647,12 @@ PyObject *PyUnicode_DecodeUTF7(const char *s,
|
|||
if (s < e)
|
||||
goto restart;
|
||||
}
|
||||
if (consumed) {
|
||||
if(inShift)
|
||||
*consumed = startinpos;
|
||||
else
|
||||
*consumed = s-starts;
|
||||
}
|
||||
|
||||
if (_PyUnicode_Resize(&unicode, p - PyUnicode_AS_UNICODE(unicode)) < 0)
|
||||
goto onError;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue