summaryrefslogtreecommitdiffstats
path: root/Modules
diff options
context:
space:
mode:
authorNeal Norwitz <nnorwitz@gmail.com>2006-08-12 03:18:50 (GMT)
committerNeal Norwitz <nnorwitz@gmail.com>2006-08-12 03:18:50 (GMT)
commitebcf8759bb08fbb2c37b65ec7657421a273f245a (patch)
treecd1c61f75caa97374d9c1a276725848b6c3b1afd /Modules
parent0f7dbf731a9f2b9422fa6e08188edf654f2848a9 (diff)
downloadcpython-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.c17
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;
}