diff options
author | Andrew M. Kuchling <amk@amk.ca> | 2006-10-04 13:20:05 +0000 |
---|---|---|
committer | Andrew M. Kuchling <amk@amk.ca> | 2006-10-04 13:20:05 +0000 |
commit | d3499a30713c972e293ee677efe7b37a41efb4db (patch) | |
tree | 9496de8728b0e2b215f76e50e313c4734ee4a85a | |
parent | 3b93688db6abe8a1b3a975ad8a2e770af056c9aa (diff) | |
download | cpython-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.c | 17 |
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; } |