diff options
author | Marc-André Lemburg <mal@egenix.com> | 2000-08-14 11:29:19 (GMT) |
---|---|---|
committer | Marc-André Lemburg <mal@egenix.com> | 2000-08-14 11:29:19 (GMT) |
commit | b7520774e2d7072e765436842ccf914ed7fd03ad (patch) | |
tree | 1a489c3fe786bdd3176873af2d36fd1e18af1bff /Objects | |
parent | 673c6cf3d480cbdd31c994a9b25a3821b6a85401 (diff) | |
download | cpython-b7520774e2d7072e765436842ccf914ed7fd03ad.zip cpython-b7520774e2d7072e765436842ccf914ed7fd03ad.tar.gz cpython-b7520774e2d7072e765436842ccf914ed7fd03ad.tar.bz2 |
Fixed a couple of instances where a 0-length string was being
resized after creation. 0-length strings are usually shared
and _PyString_Resize() fails on these shared strings.
Fixes [ Bug #111667 ] unicode core dump.
Diffstat (limited to 'Objects')
-rw-r--r-- | Objects/unicodeobject.c | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c index 1cda623..f4dc9bf 100644 --- a/Objects/unicodeobject.c +++ b/Objects/unicodeobject.c @@ -842,7 +842,7 @@ PyObject *PyUnicode_EncodeUTF8(const Py_UNICODE *s, if (v == NULL) return NULL; if (size == 0) - goto done; + return v; p = q = PyString_AS_STRING(v); while (i < size) { @@ -892,8 +892,6 @@ PyObject *PyUnicode_EncodeUTF8(const Py_UNICODE *s, *p = '\0'; if (_PyString_Resize(&v, p - q)) goto onError; - - done: return v; onError: @@ -1082,7 +1080,7 @@ PyObject *PyUnicode_EncodeUTF16(const Py_UNICODE *s, if (byteorder == 0) *p++ = 0xFEFF; if (size == 0) - goto done; + return v; if (byteorder == 0 || #ifdef BYTEORDER_IS_LITTLE_ENDIAN byteorder == -1 @@ -1096,7 +1094,6 @@ PyObject *PyUnicode_EncodeUTF16(const Py_UNICODE *s, Py_UNICODE ch = *s++; *p++ = (ch >> 8) | (ch << 8); } - done: return v; } @@ -1563,6 +1560,8 @@ PyObject *PyUnicode_EncodeRawUnicodeEscape(const Py_UNICODE *s, repr = PyString_FromStringAndSize(NULL, 6 * size); if (repr == NULL) return NULL; + if (size == 0) + return repr; p = q = PyString_AS_STRING(repr); while (size-- > 0) { @@ -1662,9 +1661,12 @@ PyObject *PyUnicode_EncodeLatin1(const Py_UNICODE *p, { PyObject *repr; char *s, *start; + repr = PyString_FromStringAndSize(NULL, size); if (repr == NULL) return NULL; + if (size == 0) + return repr; s = PyString_AS_STRING(repr); start = s; @@ -1802,9 +1804,12 @@ PyObject *PyUnicode_EncodeASCII(const Py_UNICODE *p, { PyObject *repr; char *s, *start; + repr = PyString_FromStringAndSize(NULL, size); if (repr == NULL) return NULL; + if (size == 0) + return repr; s = PyString_AS_STRING(repr); start = s; @@ -1890,7 +1895,7 @@ PyObject *PyUnicode_EncodeMBCS(const Py_UNICODE *p, repr = PyString_FromStringAndSize(NULL, mbcssize); if (repr == NULL) return NULL; - if (mbcssize==0) + if (mbcssize == 0) return repr; /* Do the conversion */ @@ -2067,6 +2072,8 @@ PyObject *PyUnicode_EncodeCharmap(const Py_UNICODE *p, v = PyString_FromStringAndSize(NULL, size); if (v == NULL) return NULL; + if (size == 0) + return v; s = PyString_AS_STRING(v); while (size-- > 0) { Py_UNICODE ch = *p++; |