summaryrefslogtreecommitdiffstats
path: root/Modules/unicodedata.c
diff options
context:
space:
mode:
authorNeal Norwitz <nnorwitz@gmail.com>2006-07-27 04:04:50 (GMT)
committerNeal Norwitz <nnorwitz@gmail.com>2006-07-27 04:04:50 (GMT)
commit37f694f21b0f5d5633516ccd8c15f4bd1822c470 (patch)
treef768628566a2c13b01a960de30ce1e7bcf032018 /Modules/unicodedata.c
parent101bac205d6938316872b74201c4c6efe2bce340 (diff)
downloadcpython-37f694f21b0f5d5633516ccd8c15f4bd1822c470.zip
cpython-37f694f21b0f5d5633516ccd8c15f4bd1822c470.tar.gz
cpython-37f694f21b0f5d5633516ccd8c15f4bd1822c470.tar.bz2
No functional change. Add comment and assert to describe why there cannot be overflow which was reported by Klocwork. Discussed on python-dev
Diffstat (limited to 'Modules/unicodedata.c')
-rw-r--r--Modules/unicodedata.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/Modules/unicodedata.c b/Modules/unicodedata.c
index 0660353..1b0be28 100644
--- a/Modules/unicodedata.c
+++ b/Modules/unicodedata.c
@@ -395,6 +395,7 @@ unicodedata_decomposition(PyObject *self, PyObject *args)
PyUnicodeObject *v;
char decomp[256];
int code, index, count, i;
+ unsigned int prefix_index;
if (!PyArg_ParseTuple(args, "O!:decomposition",
&PyUnicode_Type, &v))
@@ -428,9 +429,15 @@ unicodedata_decomposition(PyObject *self, PyObject *args)
/* XXX: could allocate the PyString up front instead
(strlen(prefix) + 5 * count + 1 bytes) */
+ /* Based on how index is calculated above and decomp_data is generated
+ from Tools/unicode/makeunicodedata.py, it should not be possible
+ to overflow decomp_prefix. */
+ prefix_index = decomp_data[index] & 255;
+ assert(prefix_index < (sizeof(decomp_prefix)/sizeof(*decomp_prefix)));
+
/* copy prefix */
- i = strlen(decomp_prefix[decomp_data[index] & 255]);
- memcpy(decomp, decomp_prefix[decomp_data[index] & 255], i);
+ i = strlen(decomp_prefix[prefix_index]);
+ memcpy(decomp, decomp_prefix[prefix_index], i);
while (count-- > 0) {
if (i)