From: Greg Beaver Date: Sun, 18 May 2008 23:12:47 +0000 (+0000) Subject: MFB fix segfault X-Git-Tag: BEFORE_HEAD_NS_CHANGE~1735 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=3d953abaf3f1a090e658f288e14c15dba73c0aaa;p=php MFB fix segfault --- diff --git a/ext/phar/cgidebug b/ext/phar/cgidebug index bacf6910a6..c0d89d7d25 100755 --- a/ext/phar/cgidebug +++ b/ext/phar/cgidebug @@ -1,11 +1,11 @@ #!/bin/sh -export SCRIPT_NAME=/frontcontroller34.php -export PATH_INFO=/start/index.php -export SCRIPT_FILENAME=/home/cellog/workspace/php5/ext/phar/tests/frontcontroller34.php -export PATH_TRANSLATED=/home/cellog/workspace/php5/ext/phar/tests/frontcontroller34.php +export SCRIPT_NAME=/front.phar.php +export PATH_INFO= +export SCRIPT_FILENAME=/home/cellog/workspace/php5/ext/phar/tests/front.phar.php +export PATH_TRANSLATED=/home/cellog/workspace/php5/ext/phar/tests/front.phar.php export REDIRECT_STATUS=1 export REQUEST_METHOD=GET -export REQUEST_URI=/frontcontroller34.php/start/index.php +export REQUEST_URI=/front.phar.php cd /home/cellog/workspace/php5/ ddd sapi/cgi/php-cgi & cd /home/cellog/workspace/php5/ext/phar diff --git a/ext/phar/phar_object.c b/ext/phar/phar_object.c index a215ed4448..1b4035a4a9 100755 --- a/ext/phar/phar_object.c +++ b/ext/phar/phar_object.c @@ -445,7 +445,7 @@ PHP_METHOD(Phar, running) */ PHP_METHOD(Phar, mount) { - char *fname, *arch, *entry, *path, *actual; + char *fname, *arch = NULL, *entry = NULL, *path, *actual; int fname_len, arch_len, entry_len, path_len, actual_len; phar_archive_data **pphar; @@ -467,7 +467,9 @@ PHP_METHOD(Phar, mount) carry_on2: if (SUCCESS != zend_hash_find(&(PHAR_GLOBALS->phar_fname_map), arch, arch_len, (void **)&pphar)) { zend_throw_exception_ex(phar_ce_PharException, 0 TSRMLS_CC, "%s is not a phar archive, cannot mount", arch); - efree(arch); + if (arch) { + efree(arch); + } return; } carry_on: @@ -476,13 +478,17 @@ carry_on: if (path && path == entry) { efree(entry); } - efree(arch); + if (arch) { + efree(arch); + } return; } - if (path && path == entry) { + if (entry && path && path == entry) { efree(entry); } - efree(arch); + if (arch) { + efree(arch); + } return; } else if (SUCCESS == zend_hash_find(&(PHAR_GLOBALS->phar_fname_map), fname, fname_len, (void **)&pphar)) { goto carry_on;