cellog          Mon Jun 16 04:10:53 2008 UTC

  Modified files:              (Branch: PHP_5_3)
    /php-src/ext/phar   phar.c phar.phar 
  Log:
  remove unused variables in phar_fix_filepath
  copy virtual_dirs to avoid segfault on multi-process
  fix metadata reading for phar.cache_list
  initialize manifest to exact size needed (performance increase)
  fix freeing of signature on error to use the correct persist value (fixes 
segfault on error in cache.list)
  reset EG(regular_list) so it is identical to how we found it
  
http://cvs.php.net/viewvc.cgi/php-src/ext/phar/phar.c?r1=1.370.2.19&r2=1.370.2.20&diff_format=u
Index: php-src/ext/phar/phar.c
diff -u php-src/ext/phar/phar.c:1.370.2.19 php-src/ext/phar/phar.c:1.370.2.20
--- php-src/ext/phar/phar.c:1.370.2.19  Sun Jun 15 23:00:46 2008
+++ php-src/ext/phar/phar.c     Mon Jun 16 04:10:53 2008
@@ -17,7 +17,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: phar.c,v 1.370.2.19 2008/06/15 23:00:46 cellog Exp $ */
+/* $Id: phar.c,v 1.370.2.20 2008/06/16 04:10:53 cellog Exp $ */
 
 #define PHAR_MAIN 1
 #include "phar_internal.h"
@@ -137,6 +137,7 @@
                                PHAR_GLOBALS->persist = 0;
                                PHAR_GLOBALS->manifest_cached = 0;
                                zend_destroy_rsrc_list(&EG(regular_list) 
TSRMLS_CC);
+                               memset(&EG(regular_list), 0, sizeof(HashTable));
                                efree(tmp);
                                zend_hash_destroy(&(PHAR_G(phar_fname_map)));
                                PHAR_GLOBALS->phar_fname_map.arBuckets = 0;
@@ -162,6 +163,7 @@
        PHAR_GLOBALS->phar_alias_map.arBuckets = 0;
 
        zend_destroy_rsrc_list(&EG(regular_list) TSRMLS_CC);
+       memset(&EG(regular_list), 0, sizeof(HashTable));
        efree(tmp);
 }
 /* }}} */
@@ -443,7 +445,7 @@
                phar_destroy_phar_data(mydata TSRMLS_CC);\
        }\
        if (signature) {\
-               pefree(signature, mydata->is_persistent);\
+               pefree(signature, PHAR_G(persist));\
        }\
        MAPPHAR_ALLOC_FAIL(msg)
 
@@ -962,11 +964,11 @@
        }
 
        /* set up our manifest */
-       zend_hash_init(&mydata->manifest, sizeof(phar_entry_info),
+       zend_hash_init(&mydata->manifest, manifest_count,
                zend_get_hash_value, destroy_phar_manifest_entry, 
mydata->is_persistent);
-       zend_hash_init(&mydata->mounted_dirs, sizeof(char *),
+       zend_hash_init(&mydata->mounted_dirs, 5,
                zend_get_hash_value, NULL, mydata->is_persistent);
-       zend_hash_init(&mydata->virtual_dirs, sizeof(char *),
+       zend_hash_init(&mydata->virtual_dirs, manifest_count * 2,
                zend_get_hash_value, NULL, mydata->is_persistent);
        offset = halt_offset + manifest_len + 4;
        memset(&entry, 0, sizeof(phar_entry_info));
@@ -1013,8 +1015,7 @@
                        entry.flags |= PHAR_ENT_PERM_DEF_DIR;
                }
                if (entry.is_persistent) {
-                       PHAR_GET_32(buffer, entry.metadata_len);
-                       if (phar_parse_metadata(&buffer, &entry.metadata, 
entry.metadata_len TSRMLS_CC) == FAILURE) {
+                       if (phar_parse_metadata(&buffer, &entry.metadata, 0 
TSRMLS_CC) == FAILURE) {
                                pefree(entry.filename, entry.is_persistent);
                                MAPPHAR_FAIL("unable to read file metadata in 
.phar file \"%s\"");
                        }
@@ -1896,9 +1897,9 @@
 {
        char newpath[MAXPATHLEN];
        int newpath_len;
-       char *ptr, *free_path, *new_phar;
+       char *ptr;
        char *tok;
-       int ptr_length, new_phar_len = 1, path_length = *new_len;
+       int ptr_length, path_length = *new_len;
 
        if (PHAR_G(cwd_len) && use_cwd && path_length > 2 && path[0] == '.' && 
path[1] == '/') {
                newpath_len = PHAR_G(cwd_len);
@@ -3332,6 +3333,9 @@
        phar->manifest = newmanifest;
        zend_hash_init(&phar->mounted_dirs, sizeof(char *),
                zend_get_hash_value, NULL, 0);
+       zend_hash_init(&phar->virtual_dirs, sizeof(char *),
+               zend_get_hash_value, NULL, 0);
+       zend_hash_copy(&phar->virtual_dirs, &(*pphar)->virtual_dirs, NULL, 
NULL, sizeof(void *));
        *pphar = phar;
 }
 /* }}} */
@@ -3408,7 +3412,7 @@
        php_info_print_table_header(2, "Phar: PHP Archive support", "enabled");
        php_info_print_table_row(2, "Phar EXT version", PHP_PHAR_VERSION);
        php_info_print_table_row(2, "Phar API version", PHP_PHAR_API_VERSION);
-       php_info_print_table_row(2, "CVS revision", "$Revision: 1.370.2.19 $");
+       php_info_print_table_row(2, "CVS revision", "$Revision: 1.370.2.20 $");
        php_info_print_table_row(2, "Phar-based phar archives", "enabled");
        php_info_print_table_row(2, "Tar-based phar archives", "enabled");
        php_info_print_table_row(2, "ZIP-based phar archives", "enabled");
http://cvs.php.net/viewvc.cgi/php-src/ext/phar/phar.phar?r1=1.7.2.18&r2=1.7.2.19&diff_format=u
Index: php-src/ext/phar/phar.phar



-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to