From: Gustavo André dos Santos Lopes Date: Fri, 24 Dec 2010 22:38:36 +0000 (+0000) Subject: - Fixed bug #53603 (ZipArchive should quiet stat errors). X-Git-Tag: php-5.3.6RC1~189 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=e7d5c4a8fd924927edd8f48c975cd34d19df8add;p=php - 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. --- diff --git a/NEWS b/NEWS index cdc8cd8a70..3492a8f166 100644 --- a/NEWS +++ b/NEWS @@ -91,6 +91,8 @@ . Fixed bug #53568 (swapped memset arguments in struct initialization). (crrodriguez at opensuse dot org) . Fixed bug #53579 (stream_get_contents() segfaults on ziparchive streams) (Hannes) + . Fixed bug #53603 (ZipArchive should quiet stat errors). (brad dot froehle at + gmail dot com, Gustavo) 09 Dec 2010, PHP 5.3.4 - Upgraded bundled Sqlite3 to version 3.7.3. (Ilia) diff --git a/ext/zip/php_zip.c b/ext/zip/php_zip.c index 1b42c94457..45784a1169 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; @@ -2378,7 +2378,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) +