summaryrefslogtreecommitdiff
path: root/ext/zip/php_zip.c
diff options
context:
space:
mode:
Diffstat (limited to 'ext/zip/php_zip.c')
-rw-r--r--ext/zip/php_zip.c12
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;