From 44d0082823d6165cfdb068aae086bc97e1b037b4 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Gustavo=20Andr=C3=A9=20dos=20Santos=20Lopes?= Date: Fri, 24 Dec 2010 22:38:36 +0000 Subject: [PATCH] - Fixed bug #53603 (ZipArchive should quiet stat errors). #It is unclear if url_stat handlers should emit a warning in case #PHP_STREAM_URL_STAT_QUIET is not specified and the resource does #not exist. Most url_stat handlers never emit messages; the plain #one does only so in the extraordinary event of an open_basedir #restriction. #But in case, php_stat uses PHP_STREAM_URL_STAT_QUIET for the #FS_EXISTS, which suggests that mere checks on file existence are #supposed to use this flag (arguably). #The downside is that important diagnostic messages might be #omitted. --- ext/zip/php_zip.c | 4 ++-- ext/zip/tests/bug53603.phpt | 38 +++++++++++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+), 2 deletions(-) create mode 100644 ext/zip/tests/bug53603.phpt diff --git a/ext/zip/php_zip.c b/ext/zip/php_zip.c index e7c7014bb6..9b170f2655 100644 --- a/ext/zip/php_zip.c +++ b/ext/zip/php_zip.c @@ -196,7 +196,7 @@ static int php_zip_extract_file(struct zip * za, char *dest, char *file, int fil } /* let see if the path already exists */ - if (php_stream_stat_path(file_dirname_fullpath, &ssb) < 0) { + if (php_stream_stat_path_ex(file_dirname_fullpath, PHP_STREAM_URL_STAT_QUIET, &ssb, NULL) < 0) { #if defined(PHP_WIN32) && (PHP_MAJOR_VERSION == 5 && PHP_MINOR_VERSION == 1) char *e; @@ -2379,7 +2379,7 @@ static ZIPARCHIVE_METHOD(extractTo) RETURN_FALSE; } - if (php_stream_stat_path(pathto, &ssb) < 0) { + if (php_stream_stat_path_ex(pathto, PHP_STREAM_URL_STAT_QUIET, &ssb, NULL) < 0) { ret = php_stream_mkdir(pathto, 0777, PHP_STREAM_MKDIR_RECURSIVE, NULL); if (!ret) { RETURN_FALSE; diff --git a/ext/zip/tests/bug53603.phpt b/ext/zip/tests/bug53603.phpt new file mode 100644 index 0000000000..7be20dc0e3 --- /dev/null +++ b/ext/zip/tests/bug53603.phpt @@ -0,0 +1,38 @@ +--TEST-- +Bug #53603 (ZipArchive should quiet stat errors) +--SKIPIF-- + +--FILE-- +open($file) !== TRUE) { + echo "open failed.\n"; + exit('failed'); +} + +$a = $zip->extractTo('teststream://test'); +var_dump($a); + +--EXPECTF-- +Warning: ZipArchive::extractTo(teststream://test/foo): failed to open stream: "TestStream::stream_open" call failed in %s on line %d + +Warning: ZipArchive::extractTo(teststream://test/bar): failed to open stream: "TestStream::stream_open" call failed in %s on line %d + +Warning: ZipArchive::extractTo(teststream://test/foobar/baz): failed to open stream: "TestStream::stream_open" call failed in %s on line %d +bool(true) + -- 2.50.1