From: Martin v. Löwis Date: Thu, 6 Nov 2003 20:47:43 +0000 (+0000) Subject: Overallocate target buffer for normalization more early. Fixes #834676. X-Git-Tag: v2.3.3c1~71 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=058806e7164389fbaf5173e9b7a8a6a57f03af90;p=thirdparty%2FPython%2Fcpython.git Overallocate target buffer for normalization more early. Fixes #834676. --- diff --git a/Lib/test/test_normalization.py b/Lib/test/test_normalization.py index 046dca6c851b..0cbc2b49e9fb 100644 --- a/Lib/test/test_normalization.py +++ b/Lib/test/test_normalization.py @@ -84,5 +84,8 @@ def test_main(): continue assert X == NFC(X) == NFD(X) == NFKC(X) == NFKD(X), c + # Check for bug 834676 + normalize('NFC',u'\ud55c\uae00') + if __name__ == "__main__": test_main() diff --git a/Misc/NEWS b/Misc/NEWS index be3e7f07ee26..5bb76a7c8b3a 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -18,6 +18,8 @@ Core and builtins Extension modules ----------------- +- Bug #834676: Fix crashes when normalizing Hangul syllables. + - Bug #703198: Ignore "b" and "t" in os.popen on Unix. - Patch #803998: Deal with errors in SSL_write correctly. diff --git a/Modules/unicodedata.c b/Modules/unicodedata.c index d266ad7e0b49..311db296bdbc 100644 --- a/Modules/unicodedata.c +++ b/Modules/unicodedata.c @@ -311,12 +311,14 @@ nfd_nfkd(PyObject *input, int k) stack[stackptr++] = *i++; while(stackptr) { Py_UNICODE code = stack[--stackptr]; - if (!space) { - space = PyString_GET_SIZE(result) + 10; - if (PyUnicode_Resize(&result, space) == -1) + /* Hangul Decomposition adds three characters in + a single step, so we need atleast that much room. */ + if (space < 3) { + int newsize = PyString_GET_SIZE(result) + 10; + space += 10; + if (PyUnicode_Resize(&result, newsize) == -1) return NULL; - o = PyUnicode_AS_UNICODE(result) + space - 10; - space = 10; + o = PyUnicode_AS_UNICODE(result) + newsize - space; } /* Hangul Decomposition. */ if (SBase <= code && code < (SBase+SCount)) {