dmitry Thu Jul 10 16:16:15 2008 UTC Modified files: (Branch: PHP_5_3) /php-src/ext/phar func_interceptors.c stream.c util.c Log: Fixed wrong refcount updates http://cvs.php.net/viewvc.cgi/php-src/ext/phar/func_interceptors.c?r1=1.20.2.8&r2=1.20.2.9&diff_format=u Index: php-src/ext/phar/func_interceptors.c diff -u php-src/ext/phar/func_interceptors.c:1.20.2.8 php-src/ext/phar/func_interceptors.c:1.20.2.9 --- php-src/ext/phar/func_interceptors.c:1.20.2.8 Thu Jul 10 11:36:50 2008 +++ php-src/ext/phar/func_interceptors.c Thu Jul 10 16:16:15 2008 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: func_interceptors.c,v 1.20.2.8 2008/07/10 11:36:50 dmitry Exp $ */ +/* $Id: func_interceptors.c,v 1.20.2.9 2008/07/10 16:16:15 dmitry Exp $ */ #include "phar_internal.h" @@ -658,7 +658,7 @@ efree(entry); goto stat_entry; } - if (SUCCESS == zend_hash_find(&(phar->virtual_dirs), entry, entry_len, (void **) &data)) { + if (zend_hash_exists(&(phar->virtual_dirs), entry, entry_len)) { efree(entry); efree(arch); if (IS_EXISTS_CHECK(type)) { @@ -706,7 +706,7 @@ } goto stat_entry; } - if (SUCCESS == zend_hash_find(&(phar->virtual_dirs), entry + 1, entry_len - 1, (void **) &data)) { + if (zend_hash_exists(&(phar->virtual_dirs), entry + 1, entry_len - 1)) { PHAR_G(cwd) = save; PHAR_G(cwd_len) = save_len; efree(entry); http://cvs.php.net/viewvc.cgi/php-src/ext/phar/stream.c?r1=1.27.2.7&r2=1.27.2.8&diff_format=u Index: php-src/ext/phar/stream.c diff -u php-src/ext/phar/stream.c:1.27.2.7 php-src/ext/phar/stream.c:1.27.2.8 --- php-src/ext/phar/stream.c:1.27.2.7 Fri Jun 27 01:21:12 2008 +++ php-src/ext/phar/stream.c Thu Jul 10 16:16:15 2008 @@ -608,7 +608,7 @@ php_url_free(resource); return SUCCESS; } - if (SUCCESS == zend_hash_find(&(phar->virtual_dirs), internal_file, internal_file_len, (void **) &entry)) { + if (zend_hash_exists(&(phar->virtual_dirs), internal_file, internal_file_len)) { phar_dostat(phar, NULL, ssb, 1, phar->alias, phar->alias_len TSRMLS_CC); php_url_free(resource); return SUCCESS; http://cvs.php.net/viewvc.cgi/php-src/ext/phar/util.c?r1=1.55.2.21&r2=1.55.2.22&diff_format=u Index: php-src/ext/phar/util.c diff -u php-src/ext/phar/util.c:1.55.2.21 php-src/ext/phar/util.c:1.55.2.22 --- php-src/ext/phar/util.c:1.55.2.21 Mon Jun 23 19:18:01 2008 +++ php-src/ext/phar/util.c Thu Jul 10 16:16:15 2008 @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: util.c,v 1.55.2.21 2008/06/23 19:18:01 sfox Exp $ */ +/* $Id: util.c,v 1.55.2.22 2008/07/10 16:16:15 dmitry Exp $ */ #include "phar_internal.h" @@ -1358,7 +1358,7 @@ return entry; } if (dir) { - if (SUCCESS == zend_hash_find(&phar->virtual_dirs, path, path_len, (void**)&entry)) { + if (zend_hash_exists(&phar->virtual_dirs, path, path_len)) { /* a file or directory exists in a sub-directory of this path */ entry = (phar_entry_info *) ecalloc(1, sizeof(phar_entry_info)); /* this next line tells PharFileInfo->__destruct() to efree the filename */ @@ -1958,12 +1958,16 @@ */ static int phar_add_empty(HashTable *ht, char *arKey, uint nKeyLength) /* {{{ */ { - char *dummy = (char*)1; + char **dummy; + if (SUCCESS == zend_hash_find(ht, arKey, nKeyLength, (void **)&dummy)) { - dummy++; - } + (*dummy)++; + return SUCCESS; + } else { + char *dummy = (char*)1; - return zend_hash_update(ht, arKey, nKeyLength, (char *) &dummy, sizeof(void *), NULL); + return zend_hash_add(ht, arKey, nKeyLength, (char *) &dummy, sizeof(void *), NULL); + } } /* }}} */ @@ -1983,19 +1987,15 @@ void phar_delete_virtual_dirs(phar_archive_data *phar, char *filename, int filename_len TSRMLS_DC) /* {{{ */ { char *s = filename; + char **dummy; /* we use filename_len - 1 to avoid adding a virtual dir for empty directory entries */ for (; s - filename < filename_len - 1; s++) { if (*s == '/') { - char *dummy; - if (FAILURE == zend_hash_find(&phar->virtual_dirs, filename, s - filename, (void **)&dummy)) { - continue; - } - - if (!--dummy) { - zend_hash_del(&phar->virtual_dirs, filename, s - filename); - } else { - zend_hash_update(&phar->virtual_dirs, filename, s - filename, &dummy, sizeof(void *), NULL); + if (SUCCESS == zend_hash_find(&phar->virtual_dirs, filename, s - filename, (void **)&dummy)) { + if (!--(*dummy)) { + zend_hash_del(&phar->virtual_dirs, filename, s - filename); + } } } }
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php