From 16e6a80923db90031a50790613ef3673b30886d2 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Mon, 12 Dec 2011 13:24:15 +0100 Subject: PyUnicode_Resize(): warn about canonical representation Call also directly unicode_resize() in unicodeobject.c --- Include/unicodeobject.h | 5 ++++- Objects/unicodeobject.c | 25 +++++++++++++------------ 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/Include/unicodeobject.h b/Include/unicodeobject.h index 32d7df7..cd35ae6 100644 --- a/Include/unicodeobject.h +++ b/Include/unicodeobject.h @@ -779,7 +779,10 @@ PyAPI_FUNC(Py_UNICODE) PyUnicode_GetMax(void); a new string and copy characters), or create a new string. Error handling is implemented as follows: an exception is set, -1 - is returned and *unicode left untouched. */ + is returned and *unicode left untouched. + + WARNING: The function doesn't check string content, the result may not be a + string in canonical representation. */ PyAPI_FUNC(int) PyUnicode_Resize( PyObject **unicode, /* Pointer to the Unicode object */ diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c index 6edba5d..5758ffa 100644 --- a/Objects/unicodeobject.c +++ b/Objects/unicodeobject.c @@ -5040,7 +5040,7 @@ PyUnicode_DecodeUTF32Stateful(const char *s, *consumed = (const char *)q-starts; /* Adjust length */ - if (PyUnicode_Resize(&unicode, outpos) < 0) + if (unicode_resize(&unicode, outpos) < 0) goto onError; Py_XDECREF(errorHandler); @@ -5404,7 +5404,7 @@ PyUnicode_DecodeUTF16Stateful(const char *s, *consumed = (const char *)q-starts; /* Adjust length */ - if (PyUnicode_Resize(&unicode, outpos) < 0) + if (unicode_resize(&unicode, outpos) < 0) goto onError; Py_XDECREF(errorHandler); @@ -5824,7 +5824,7 @@ PyUnicode_DecodeUnicodeEscape(const char *s, } #undef WRITECHAR - if (PyUnicode_Resize(&v, i) < 0) + if (unicode_resize(&v, i) < 0) goto onError; Py_XDECREF(errorHandler); Py_XDECREF(exc); @@ -6086,7 +6086,7 @@ PyUnicode_DecodeRawUnicodeEscape(const char *s, nextByte: ; } - if (PyUnicode_Resize(&v, outpos) < 0) + if (unicode_resize(&v, outpos) < 0) goto onError; Py_XDECREF(errorHandler); Py_XDECREF(exc); @@ -6273,7 +6273,7 @@ _PyUnicode_DecodeUnicodeInternal(const char *s, goto onError; } - if (PyUnicode_Resize(&v, outpos) < 0) + if (unicode_resize(&v, outpos) < 0) goto onError; Py_XDECREF(errorHandler); Py_XDECREF(exc); @@ -6727,7 +6727,7 @@ PyUnicode_DecodeASCII(const char *s, data = PyUnicode_DATA(v); } } - if (PyUnicode_Resize(&v, outpos) < 0) + if (unicode_resize(&v, outpos) < 0) goto onError; Py_XDECREF(errorHandler); Py_XDECREF(exc); @@ -6874,7 +6874,7 @@ decode_code_page_strict(UINT code_page, else { /* Extend unicode object */ Py_ssize_t n = PyUnicode_GET_SIZE(*v); - if (PyUnicode_Resize(v, n + outsize) < 0) + if (unicode_resize(v, n + outsize) < 0) return -1; out = PyUnicode_AS_UNICODE(*v) + n; } @@ -6958,7 +6958,7 @@ decode_code_page_errors(UINT code_page, PyErr_NoMemory(); goto error; } - if (PyUnicode_Resize(v, n + size * Py_ARRAY_LENGTH(buffer)) < 0) + if (unicode_resize(v, n + size * Py_ARRAY_LENGTH(buffer)) < 0) goto error; startout = PyUnicode_AS_UNICODE(*v) + n; } @@ -7017,7 +7017,7 @@ decode_code_page_errors(UINT code_page, /* Extend unicode object */ outsize = out - startout; assert(outsize <= PyUnicode_WSTR_LENGTH(*v)); - if (PyUnicode_Resize(v, outsize) < 0) + if (unicode_resize(v, outsize) < 0) goto error; ret = size; @@ -7664,8 +7664,9 @@ PyUnicode_DecodeCharmap(const char *s, (targetsize << 2); extrachars += needed; /* XXX overflow detection missing */ - if (PyUnicode_Resize(&v, - PyUnicode_GET_LENGTH(v) + needed) < 0) { + if (unicode_resize(&v, + PyUnicode_GET_LENGTH(v) + needed) < 0) + { Py_DECREF(x); goto onError; } @@ -7689,7 +7690,7 @@ PyUnicode_DecodeCharmap(const char *s, ++s; } } - if (PyUnicode_Resize(&v, outpos) < 0) + if (unicode_resize(&v, outpos) < 0) goto onError; Py_XDECREF(errorHandler); Py_XDECREF(exc); -- cgit v0.12