From 891067c9750622bab7ca3af967e864c5867d7103 Mon Sep 17 00:00:00 2001 From: Greg Beaver Date: Fri, 21 Mar 2008 19:54:07 +0000 Subject: fix the memleak - but this breaks the \*compressAllFiles\*() methods because of fatal flaw in renaming implementation - see pecl-dev email for details --- ext/phar/util.c | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'ext/phar/util.c') diff --git a/ext/phar/util.c b/ext/phar/util.c index 6f38a17c8a..092134c2bc 100644 --- a/ext/phar/util.c +++ b/ext/phar/util.c @@ -77,6 +77,7 @@ void phar_rename_archive(phar_archive_data *phar, char *ext, zend_bool compress char *oldname = NULL, *oldpath = NULL; char *basename = NULL, *basepath = NULL; char *newname = NULL, *newpath = NULL; + dtor_func_t save; if (phar->flags && compress) { char *error; @@ -158,6 +159,12 @@ void phar_rename_archive(phar_archive_data *phar, char *ext, zend_bool compress zend_hash_update(&(PHAR_GLOBALS->phar_alias_map), newpath, strlen(newpath), (void*)&phar, sizeof(phar_archive_data*), NULL); } + /* remove old guy, add new guy */ + save = PHAR_GLOBALS->phar_fname_map.pDestructor; + /* don't destruct, we are only renaming */ + PHAR_GLOBALS->phar_fname_map.pDestructor = NULL; + zend_hash_del(&(PHAR_GLOBALS->phar_fname_map), oldpath, phar->fname_len); + PHAR_GLOBALS->phar_fname_map.pDestructor = save; zend_hash_add(&(PHAR_GLOBALS->phar_fname_map), newpath, strlen(newpath), (void*)&phar, sizeof(phar_archive_data*), NULL); efree(phar->fname); -- cgit v1.2.1