mirror of
https://github.com/php/php-src.git
synced 2024-09-23 02:47:26 +00:00
fix PHP Bug #48377: error message unclear on converting phar with existing file
This commit is contained in:
parent
f8cdac39a5
commit
09072ae3df
@ -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);
|
||||
|
25
ext/phar/tests/bug48377.2.phpt
Normal file
25
ext/phar/tests/bug48377.2.phpt
Normal file
@ -0,0 +1,25 @@
|
||||
--TEST--
|
||||
Phar: PHP bug #48377 "error message unclear on converting phar with existing file" test #2
|
||||
--SKIPIF--
|
||||
<?php if (!extension_loaded("phar")) die("skip"); ?>
|
||||
--INI--
|
||||
phar.require_hash=0
|
||||
phar.readonly=0
|
||||
--FILE--
|
||||
<?php
|
||||
$fname = dirname(__FILE__) . '/' . basename(__FILE__, '.php') . '.zip';
|
||||
|
||||
$phar = new PharData($fname);
|
||||
$phar['x'] = 'hi';
|
||||
try {
|
||||
$phar->convertToData(Phar::ZIP, Phar::NONE, '.2.phar.zip');
|
||||
} catch (BadMethodCallException $e) {
|
||||
echo $e->getMessage(),"\n";
|
||||
}
|
||||
?>
|
||||
===DONE===
|
||||
--CLEAN--
|
||||
<?php unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') . '.zip');?>
|
||||
--EXPECTF--
|
||||
data phar "%sbug48377.2.phar.zip" has invalid extension 2.phar.zip
|
||||
===DONE===
|
29
ext/phar/tests/bug48377.phpt
Normal file
29
ext/phar/tests/bug48377.phpt
Normal file
@ -0,0 +1,29 @@
|
||||
--TEST--
|
||||
Phar: PHP bug #48377 "error message unclear on converting phar with existing file"
|
||||
--SKIPIF--
|
||||
<?php if (!extension_loaded("phar")) die("skip"); ?>
|
||||
--INI--
|
||||
phar.require_hash=0
|
||||
phar.readonly=0
|
||||
--FILE--
|
||||
<?php
|
||||
$fname = dirname(__FILE__) . '/' . basename(__FILE__, '.php') . '.phar';
|
||||
$fname2 = dirname(__FILE__) . '/' . basename(__FILE__, '.php') . '.zip';
|
||||
|
||||
touch($fname2);
|
||||
|
||||
$phar = new Phar($fname, 0, 'a.phar');
|
||||
$phar['x'] = 'hi';
|
||||
try {
|
||||
$phar->convertToData(Phar::ZIP, Phar::NONE, 'zip');
|
||||
} catch (BadMethodCallException $e) {
|
||||
echo $e->getMessage(),"\n";
|
||||
}
|
||||
?>
|
||||
===DONE===
|
||||
--CLEAN--
|
||||
<?php unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') . '.phar');?>
|
||||
<?php unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') . '.zip');?>
|
||||
--EXPECTF--
|
||||
phar "%sbug48377.zip" exists and must be unlinked prior to conversion
|
||||
===DONE===
|
Loading…
Reference in New Issue
Block a user