From: Greg Beaver Date: Thu, 23 Jul 2009 17:04:24 +0000 (+0000) Subject: fix PHP Bug #48377: error message unclear on converting phar with existing file X-Git-Tag: php-5.4.0alpha1~191^2~3007 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=09072ae3df40c56a2dc9adf5c3999d1cdce58f0b;p=php fix PHP Bug #48377: error message unclear on converting phar with existing file --- diff --git a/ext/phar/phar_object.c b/ext/phar/phar_object.c index a529c50eab..285ebafc86 100755 --- a/ext/phar/phar_object.c +++ b/ext/phar/phar_object.c @@ -2037,6 +2037,7 @@ static zval *phar_rename_archive(phar_archive_data *phar, char *ext, zend_bool c int ext_len = ext ? strlen(ext) : 0; int oldname_len; phar_archive_data **pphar = NULL; + php_stream_statbuf ssb; if (!ext) { if (phar->is_zip) { @@ -2107,6 +2108,8 @@ static zval *phar_rename_archive(phar_archive_data *phar, char *ext, zend_bool c spprintf(&newname, 0, "%s.%s", strtok(basename, "."), ext); efree(basename); + + basepath = estrndup(oldpath, (strlen(oldpath) - oldname_len)); phar->fname_len = spprintf(&newpath, 0, "%s%s", basepath, newname); phar->fname = newpath; @@ -2142,6 +2145,11 @@ static zval *phar_rename_archive(phar_archive_data *phar, char *ext, zend_bool c return NULL; } its_ok: + if (SUCCESS == php_stream_stat_path(newpath, &ssb)) { + efree(oldpath); + zend_throw_exception_ex(spl_ce_BadMethodCallException, 0 TSRMLS_CC, "phar \"%s\" exists and must be unlinked prior to conversion", newpath); + return NULL; + } if (!phar->is_data) { if (SUCCESS != phar_detect_phar_fname_ext(newpath, phar->fname_len, (const char **) &(phar->ext), &(phar->ext_len), 1, 1, 1 TSRMLS_CC)) { efree(oldpath); diff --git a/ext/phar/tests/bug48377.2.phpt b/ext/phar/tests/bug48377.2.phpt new file mode 100644 index 0000000000..be2a0e1036 --- /dev/null +++ b/ext/phar/tests/bug48377.2.phpt @@ -0,0 +1,25 @@ +--TEST-- +Phar: PHP bug #48377 "error message unclear on converting phar with existing file" test #2 +--SKIPIF-- + +--INI-- +phar.require_hash=0 +phar.readonly=0 +--FILE-- +convertToData(Phar::ZIP, Phar::NONE, '.2.phar.zip'); +} catch (BadMethodCallException $e) { + echo $e->getMessage(),"\n"; +} +?> +===DONE=== +--CLEAN-- + +--EXPECTF-- +data phar "%sbug48377.2.phar.zip" has invalid extension 2.phar.zip +===DONE=== \ No newline at end of file diff --git a/ext/phar/tests/bug48377.phpt b/ext/phar/tests/bug48377.phpt new file mode 100644 index 0000000000..6282a1565e --- /dev/null +++ b/ext/phar/tests/bug48377.phpt @@ -0,0 +1,29 @@ +--TEST-- +Phar: PHP bug #48377 "error message unclear on converting phar with existing file" +--SKIPIF-- + +--INI-- +phar.require_hash=0 +phar.readonly=0 +--FILE-- +convertToData(Phar::ZIP, Phar::NONE, 'zip'); +} catch (BadMethodCallException $e) { + echo $e->getMessage(),"\n"; +} +?> +===DONE=== +--CLEAN-- + + +--EXPECTF-- +phar "%sbug48377.zip" exists and must be unlinked prior to conversion +===DONE=== \ No newline at end of file