summaryrefslogtreecommitdiff
path: root/ext/zip
diff options
context:
space:
mode:
authorGustavo André dos Santos Lopes <cataphract@php.net>2010-12-24 22:38:36 (GMT)
committerGustavo André dos Santos Lopes <cataphract@php.net>2010-12-24 22:38:36 (GMT)
commit44d0082823d6165cfdb068aae086bc97e1b037b4 (patch)
tree71869b7346b27f5a9d22316639c0c7756cbff667 /ext/zip
parent3143828eb3e6df1080ba0a0304bbf970aa5efe92 (diff)
downloadphp-44d0082823d6165cfdb068aae086bc97e1b037b4.tar.gz
- 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.
Diffstat (limited to 'ext/zip')
-rw-r--r--ext/zip/php_zip.c4
-rw-r--r--ext/zip/tests/bug53603.phpt38
2 files changed, 40 insertions, 2 deletions
diff --git a/ext/zip/php_zip.c b/ext/zip/php_zip.c
index e7c7014..9b170f2 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 0000000..7be20dc
--- /dev/null
+++ b/ext/zip/tests/bug53603.phpt
@@ -0,0 +1,38 @@
+--TEST--
+Bug #53603 (ZipArchive should quiet stat errors)
+--SKIPIF--
+<?php
+if(!extension_loaded('zip')) die('skip');
+?>
+--FILE--
+<?php
+
+class TestStream {
+ function url_stat($path, $flags) {
+ if (!($flags & STREAM_URL_STAT_QUIET))
+ trigger_error("not quiet");
+ return array();
+ }
+}
+
+stream_wrapper_register("teststream", "TestStream");
+
+$dirname = dirname(__FILE__) . '/';
+$file = $dirname . 'test_with_comment.zip';
+$zip = new ZipArchive;
+if ($zip->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)
+