diff options
author | Nuno Lopes <nlopess@php.net> | 2007-01-06 20:16:25 +0000 |
---|---|---|
committer | Nuno Lopes <nlopess@php.net> | 2007-01-06 20:16:25 +0000 |
commit | 3eaf46af3e2b0027bb94cc05fb2f4154311df1c7 (patch) | |
tree | 585a962b6f635786e68f73a1c45e8a69ca3ddc3a /ext/zip/php_zip.c | |
parent | 9b253882fcf108f7d54c88db4c047f5861a93463 (diff) | |
download | php-git-3eaf46af3e2b0027bb94cc05fb2f4154311df1c7.tar.gz |
fix a few memleaks and double-free()s on error conditions
Diffstat (limited to 'ext/zip/php_zip.c')
-rw-r--r-- | ext/zip/php_zip.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/ext/zip/php_zip.c b/ext/zip/php_zip.c index cfacdec74a..21291c0133 100644 --- a/ext/zip/php_zip.c +++ b/ext/zip/php_zip.c @@ -551,7 +551,9 @@ static void php_zip_free_dir(zend_rsrc_list_entry *rsrc TSRMLS_DC) if (zip_int) { if (zip_int->za) { - zip_close(zip_int->za); + if (zip_close(zip_int->za) != 0) { + _zip_free(zip_int->za); + } zip_int->za = NULL; } @@ -906,16 +908,20 @@ static ZIPARCHIVE_METHOD(open) if (ze_obj->za) { /* we already have an opened zip, free it */ - zip_close(ze_obj->za); + if (zip_close(ze_obj->za) != 0) { + _zip_free(ze_obj->za); + } + ze_obj->za = NULL; } if (ze_obj->filename) { efree(ze_obj->filename); + ze_obj->filename = NULL; } intern = zip_open(resolved_path, flags, &err); if (!intern || err) { RETURN_LONG((long)err); } - ze_obj->filename = estrndup(resolved_path, strlen(resolved_path)); + ze_obj->filename = estrdup(resolved_path); ze_obj->filename_len = filename_len; ze_obj->za = intern; RETURN_TRUE; |