diff options
author | Neal Norwitz <nnorwitz@gmail.com> | 2006-08-12 03:18:50 (GMT) |
---|---|---|
committer | Neal Norwitz <nnorwitz@gmail.com> | 2006-08-12 03:18:50 (GMT) |
commit | ebcf8759bb08fbb2c37b65ec7657421a273f245a (patch) | |
tree | cd1c61f75caa97374d9c1a276725848b6c3b1afd /Modules | |
parent | 0f7dbf731a9f2b9422fa6e08188edf654f2848a9 (diff) | |
download | cpython-ebcf8759bb08fbb2c37b65ec7657421a273f245a.zip cpython-ebcf8759bb08fbb2c37b65ec7657421a273f245a.tar.gz cpython-ebcf8759bb08fbb2c37b65ec7657421a273f245a.tar.bz2 |
Verify verdat which is returned from malloc is not NULL.
Ensure we don't pass NULL to free.
Klocwork #306 (at least the first part, checking malloc)
Diffstat (limited to 'Modules')
-rw-r--r-- | Modules/rgbimgmodule.c | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/Modules/rgbimgmodule.c b/Modules/rgbimgmodule.c index a2b91c4..0f9ee71 100644 --- a/Modules/rgbimgmodule.c +++ b/Modules/rgbimgmodule.c @@ -410,6 +410,11 @@ longimagedata(PyObject *self, PyObject *args) addlongimgtag(base, xsize, ysize); #endif verdat = (unsigned char *)malloc(xsize); + if (!verdat) { + Py_CLEAR(rv); + goto finally; + } + fseek(inf, 512, SEEK_SET); for (z = 0; z < zsize; z++) { lptr = base; @@ -431,10 +436,14 @@ longimagedata(PyObject *self, PyObject *args) copybw((Py_Int32 *) base, xsize * ysize); } finally: - free(starttab); - free(lengthtab); - free(rledat); - free(verdat); + if (starttab) + free(starttab); + if (lengthtab) + free(lengthtab); + if (rledat) + free(rledat); + if (verdat) + free(verdat); fclose(inf); return rv; } |