cvs: php-src(PHP_5_3) /ext/phar func_interceptors.c stream.c util.c
| From: | Dmitry Stogov | Date: | Thu, 10 Jul 2008 16:16:15 +0000 |
| Subject: | cvs: php-src(PHP_5_3) /ext/phar func_interceptors.c stream.c util.c | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-50982@lists.php.net to get a copy of this message | ||
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);
+ }
}
}
}