cataphract Tue, 01 Feb 2011 22:55:17 +0000 Revision: http://svn.php.net/viewvc?view=revision&revision=307934
Log: - Fixed bug #53903 (userspace stream stat callback does not separate the elements of the returned array before converting them). Bug: http://bugs.php.net/53903 (Assigned) streamwrapper/stream_stat causes problems Changed paths: U php/php-src/branches/PHP_5_3/NEWS A php/php-src/branches/PHP_5_3/ext/standard/tests/streams/bug53903.phpt U php/php-src/branches/PHP_5_3/main/streams/userspace.c A php/php-src/trunk/ext/standard/tests/streams/bug53903.phpt U php/php-src/trunk/main/streams/userspace.c Modified: php/php-src/branches/PHP_5_3/NEWS =================================================================== --- php/php-src/branches/PHP_5_3/NEWS 2011-02-01 20:59:25 UTC (rev 307933) +++ php/php-src/branches/PHP_5_3/NEWS 2011-02-01 22:55:17 UTC (rev 307934) @@ -140,6 +140,8 @@ - Streams: . Implemented FR #26158 (open arbitrary file descriptor with fopen). (Gustavo) + . Fixed bug #53903 (userspace stream stat callback does not separate the + elements of the returned array before converting them). (Gustavo) - XSL extension: . Fixed memory leaked introduced by the NULL poisoning patch. Added: php/php-src/branches/PHP_5_3/ext/standard/tests/streams/bug53903.phpt =================================================================== --- php/php-src/branches/PHP_5_3/ext/standard/tests/streams/bug53903.phpt (rev 0) +++ php/php-src/branches/PHP_5_3/ext/standard/tests/streams/bug53903.phpt 2011-02-01 22:55:17 UTC (rev 307934) @@ -0,0 +1,32 @@ +--TEST-- +Bug #53903 streamwrapper/stream_stat causes problems +--FILE-- +<?php + +class sw { + + public function stream_open($path, $mode, $options, &$opened_path) { + return true; + } + + public function stream_stat() { + return array( + 'atime' => $this->undefined, + ); + } + +} +stream_wrapper_register('sx', 'sw') or die('failed'); + +fstat(fopen('sx://test', 'r')); + +$s[] = 1; // Cannot use a scalar value as an array + +print_r($s); +--EXPECTF-- +Notice: Undefined property: sw::$undefined in %s on line %d +Array +( + [0] => 1 +) + Modified: php/php-src/branches/PHP_5_3/main/streams/userspace.c =================================================================== --- php/php-src/branches/PHP_5_3/main/streams/userspace.c 2011-02-01 20:59:25 UTC (rev 307933) +++ php/php-src/branches/PHP_5_3/main/streams/userspace.c 2011-02-01 22:55:17 UTC (rev 307934) @@ -856,6 +856,7 @@ #define STAT_PROP_ENTRY_EX(name, name2) \ if (SUCCESS == zend_hash_find(Z_ARRVAL_P(array), #name, sizeof(#name), (void**)&elem)) { \ + SEPARATE_ZVAL(elem); \ convert_to_long(*elem); \ ssb->sb.st_##name2 = Z_LVAL_PP(elem); \ } Added: php/php-src/trunk/ext/standard/tests/streams/bug53903.phpt =================================================================== --- php/php-src/trunk/ext/standard/tests/streams/bug53903.phpt (rev 0) +++ php/php-src/trunk/ext/standard/tests/streams/bug53903.phpt 2011-02-01 22:55:17 UTC (rev 307934) @@ -0,0 +1,32 @@ +--TEST-- +Bug #53903 streamwrapper/stream_stat causes problems +--FILE-- +<?php + +class sw { + + public function stream_open($path, $mode, $options, &$opened_path) { + return true; + } + + public function stream_stat() { + return array( + 'atime' => $this->undefined, + ); + } + +} +stream_wrapper_register('sx', 'sw') or die('failed'); + +fstat(fopen('sx://test', 'r')); + +$s[] = 1; // Cannot use a scalar value as an array + +print_r($s); +--EXPECTF-- +Notice: Undefined property: sw::$undefined in %s on line %d +Array +( + [0] => 1 +) + Modified: php/php-src/trunk/main/streams/userspace.c =================================================================== --- php/php-src/trunk/main/streams/userspace.c 2011-02-01 20:59:25 UTC (rev 307933) +++ php/php-src/trunk/main/streams/userspace.c 2011-02-01 22:55:17 UTC (rev 307934) @@ -855,6 +855,7 @@ #define STAT_PROP_ENTRY_EX(name, name2) \ if (SUCCESS == zend_hash_find(Z_ARRVAL_P(array), #name, sizeof(#name), (void**)&elem)) { \ + SEPARATE_ZVAL(elem); \ convert_to_long(*elem); \ ssb->sb.st_##name2 = Z_LVAL_PP(elem); \ }
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php