Merge branch 'PHP-8.1'

* PHP-8.1:
  Fix #77978: Dirname ending in colon unzips to wrong dir
This commit is contained in:
Christoph M. Becker 2021-10-04 12:59:00 +02:00
commit 6e55bd9a4f
No known key found for this signature in database
GPG Key ID: D66C9593118BCCB6
2 changed files with 39 additions and 2 deletions

View File

@ -105,8 +105,8 @@ static char * php_zip_make_relative_path(char *path, size_t path_len) /* {{{ */
return path;
}
if (i >= 2 && (path[i -1] == '.' || path[i -1] == ':')) {
/* i is the position of . or :, add 1 for / */
if (i >= 2 && path[i -1] == '.') {
/* i is the position of ., add 1 for / */
path_begin = path + i + 1;
break;
}

View File

@ -0,0 +1,37 @@
--TEST--
Bug #77978 (Dirname ending in colon unzips to wrong dir)
--SKIPIF--
<?php
if (!extension_loaded("zip")) die("skip zip extension not available");
?>
--FILE--
<?php
$file = __DIR__ . "/bug77978.zip";
$target = __DIR__ . "/bug77978";
mkdir($target);
$zip = new ZipArchive();
$zip->open($file, ZipArchive::CREATE|ZipArchive::OVERWRITE);
$zip->addFromString("dir/test:/filename.txt", "contents");
$zip->close();
$zip->open($file);
// Windows won't extract filenames with colons; we suppress the warning
@$zip->extractTo($target, "dir/test:/filename.txt");
$zip->close();
var_dump(!file_exists("$target/filename.txt"));
var_dump(PHP_OS_FAMILY === "Windows" || file_exists("$target/dir/test:/filename.txt"));
?>
--EXPECT--
bool(true)
bool(true)
--CLEAN--
<?php
@unlink(__DIR__ . "/bug77978.zip");
@unlink(__DIR__ . "/bug77978/dir/test:/filename.txt");
@rmdir(__DIR__ . "/bug77978/dir/test:");
@rmdir(__DIR__ . "/bug77978/dir");
@rmdir(__DIR__ . "/bug77978");
?>