]> granicus.if.org Git - php/commitdiff
fixed zip entry freeing
authorAnatoliy Belsky <ab@php.net>
Tue, 5 Jun 2012 20:49:31 +0000 (22:49 +0200)
committerAnatoliy Belsky <ab@php.net>
Thu, 7 Jun 2012 19:01:32 +0000 (21:01 +0200)
ext/zip/php_zip.c

index 01233159cefeebaba079957bd89aae81cf5be23b..f3d37c8d8f597ce17512b355c3a0329d48447297 100644 (file)
@@ -1148,7 +1148,13 @@ static void php_zip_free_entry(zend_rsrc_list_entry *rsrc TSRMLS_DC)
 
        if (zr_rsrc) {
                if (zr_rsrc->zf) {
-                       zip_fclose(zr_rsrc->zf);
+                       if (zr_rsrc->zf->za) {
+                               zip_fclose(zr_rsrc->zf);
+                       } else {
+                               if (zr_rsrc->zf->src)
+                                       zip_source_free(zr_rsrc->zf->src);
+                               free(zr_rsrc->zf);
+                       }
                        zr_rsrc->zf = NULL;
                }
                efree(zr_rsrc);
@@ -1321,9 +1327,8 @@ static PHP_NAMED_FUNCTION(zif_zip_entry_open)
 }
 /* }}} */
 
-/* {{{ proto void zip_entry_close(resource zip_ent)
+/* {{{ proto bool zip_entry_close(resource zip_ent)
    Close a zip entry */
-/* another dummy function to fit in the old api*/
 static PHP_NAMED_FUNCTION(zif_zip_entry_close)
 {
        zval * zip_entry;
@@ -1334,8 +1339,8 @@ static PHP_NAMED_FUNCTION(zif_zip_entry_close)
        }
 
        ZEND_FETCH_RESOURCE(zr_rsrc, zip_read_rsrc *, &zip_entry, -1, le_zip_entry_name, le_zip_entry);
-       /*  we got a zip_entry resource, be happy */
-       RETURN_TRUE;
+
+       RETURN_BOOL(SUCCESS == zend_list_delete(Z_LVAL_P(zip_entry)));
 }
 /* }}} */