From 3eaf46af3e2b0027bb94cc05fb2f4154311df1c7 Mon Sep 17 00:00:00 2001 From: Nuno Lopes Date: Sat, 6 Jan 2007 20:16:25 +0000 Subject: fix a few memleaks and double-free()s on error conditions --- ext/zip/php_zip.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) (limited to 'ext/zip/php_zip.c') 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; -- cgit v1.2.1