diff options
author | Walter Dörwald <walter@livinglogic.de> | 2002-09-03 13:53:40 (GMT) |
---|---|---|
committer | Walter Dörwald <walter@livinglogic.de> | 2002-09-03 13:53:40 (GMT) |
commit | 8709a420c46aac08c2e692ab8fe181c1deb61e11 (patch) | |
tree | 995b63b7da361cdefe0042cfdc2b5dccbf013869 /Objects/stringobject.c | |
parent | 8e790e700777cdb0fdecf3acaf53d5ad06784501 (diff) | |
download | cpython-8709a420c46aac08c2e692ab8fe181c1deb61e11.zip cpython-8709a420c46aac08c2e692ab8fe181c1deb61e11.tar.gz cpython-8709a420c46aac08c2e692ab8fe181c1deb61e11.tar.bz2 |
Check whether a string resize is necessary at the end
of PyString_DecodeEscape(). This prevents a call to
_PyString_Resize() for the empty string, which would
result in a PyErr_BadInternalCall(), because the
empty string has more than one reference.
This closes SF bug http://www.python.org/sf/603937
Diffstat (limited to 'Objects/stringobject.c')
-rw-r--r-- | Objects/stringobject.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/Objects/stringobject.c b/Objects/stringobject.c index 31f188a..dd38ee3 100644 --- a/Objects/stringobject.c +++ b/Objects/stringobject.c @@ -533,8 +533,8 @@ PyObject *PyString_DecodeEscape(const char *s, char *p, *buf; const char *end; PyObject *v; - v = PyString_FromStringAndSize((char *)NULL, - recode_encoding ? 4*len:len); + int newlen = recode_encoding ? 4*len:len; + v = PyString_FromStringAndSize((char *)NULL, newlen); if (v == NULL) return NULL; p = buf = PyString_AsString(v); @@ -660,7 +660,8 @@ PyObject *PyString_DecodeEscape(const char *s, break; } } - _PyString_Resize(&v, (int)(p - buf)); + if (p-buf < newlen) + _PyString_Resize(&v, (int)(p - buf)); return v; failed: Py_DECREF(v); |