Skip to content

Commit

Permalink
- Fixed bug #53603 (ZipArchive should quiet stat errors).
Browse files Browse the repository at this point in the history
#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.
  • Loading branch information
cataphract committed Dec 24, 2010
1 parent 3143828 commit 44d0082
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 2 deletions.
4 changes: 2 additions & 2 deletions ext/zip/php_zip.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand Down
38 changes: 38 additions & 0 deletions ext/zip/tests/bug53603.phpt
Original file line number Diff line number Diff line change
@@ -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)

0 comments on commit 44d0082

Please sign in to comment.