summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew M. Kuchling <amk@amk.ca>2006-10-04 13:20:05 +0000
committerAndrew M. Kuchling <amk@amk.ca>2006-10-04 13:20:05 +0000
commitd3499a30713c972e293ee677efe7b37a41efb4db (patch)
tree9496de8728b0e2b215f76e50e313c4734ee4a85a
parent3b93688db6abe8a1b3a975ad8a2e770af056c9aa (diff)
downloadcpython-git-d3499a30713c972e293ee677efe7b37a41efb4db.tar.gz
[Backport r51232 | neal.norwitz]
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)
-rw-r--r--Modules/rgbimgmodule.c17
1 files changed, 13 insertions, 4 deletions
diff --git a/Modules/rgbimgmodule.c b/Modules/rgbimgmodule.c
index 8c70d95e74..c5190c2d21 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;
}