bjori Sun, 29 May 2011 12:29:19 +0000 Revision: http://svn.php.net/viewvc?view=revision&revision=311545
Log: Fixed bug #54946 (stream_get_contents infinite loop) Bug: http://bugs.php.net/54946 (Open) stream_get_contents infinite loop Changed paths: U php/php-src/branches/PHP_5_3/NEWS A php/php-src/branches/PHP_5_3/ext/standard/tests/streams/bug54946.phpt U php/php-src/branches/PHP_5_3/main/streams/streams.c A php/php-src/branches/PHP_5_4/ext/standard/tests/streams/bug54946.phpt U php/php-src/branches/PHP_5_4/main/streams/streams.c A php/php-src/trunk/ext/standard/tests/streams/bug54946.phpt U php/php-src/trunk/main/streams/streams.c Modified: php/php-src/branches/PHP_5_3/NEWS =================================================================== --- php/php-src/branches/PHP_5_3/NEWS 2011-05-29 11:39:49 UTC (rev 311544) +++ php/php-src/branches/PHP_5_3/NEWS 2011-05-29 12:29:19 UTC (rev 311545) @@ -151,6 +151,7 @@ (Felipe) - Streams: + . Fixed bug #54946 (stream_get_contents infinite loop). (Hannes) . Fixed bug #54623 (Segfault when when writing to a persistent socket after closing a copy of the socket). (Gustavo) Added: php/php-src/branches/PHP_5_3/ext/standard/tests/streams/bug54946.phpt =================================================================== --- php/php-src/branches/PHP_5_3/ext/standard/tests/streams/bug54946.phpt (rev 0) +++ php/php-src/branches/PHP_5_3/ext/standard/tests/streams/bug54946.phpt 2011-05-29 12:29:19 UTC (rev 311545) @@ -0,0 +1,40 @@ +--TEST-- +Bug#54946 stream_get_contents infinite loop +--FILE-- +<?php +$filename = tempnam(sys_get_temp_dir(), "phpbug"); + +$stream = fopen($filename, "w"); // w or a +$retval = stream_get_contents($stream, 1, 1); + +var_dump($retval); +unlink($filename); + + + +$filename = tempnam(sys_get_temp_dir(), "phpbug2"); + +$stream = fopen($filename, "a"); +$retval = stream_get_contents($stream, 1, 1); + +var_dump($retval); +unlink($filename); + + + +$filename = tempnam(sys_get_temp_dir(), "phpbug3"); + +$stream = fopen($filename, "a"); +fseek($stream, 1); +$retval = stream_get_contents($stream, 1); + +var_dump($retval); +unlink($filename); +?> +===DONE=== +--EXPECT-- +string(0) "" +string(0) "" +string(0) "" +===DONE=== + Modified: php/php-src/branches/PHP_5_3/main/streams/streams.c =================================================================== --- php/php-src/branches/PHP_5_3/main/streams/streams.c 2011-05-29 11:39:49 UTC (rev 311544) +++ php/php-src/branches/PHP_5_3/main/streams/streams.c 2011-05-29 12:29:19 UTC (rev 311545) @@ -1291,6 +1291,9 @@ ptr = *buf = pemalloc_rel_orig(maxlen + 1, persistent); while ((len < maxlen) && !php_stream_eof(src)) { ret = php_stream_read(src, ptr, maxlen - len); + if (!ret) { + break; + } len += ret; ptr += ret; } Added: php/php-src/branches/PHP_5_4/ext/standard/tests/streams/bug54946.phpt =================================================================== --- php/php-src/branches/PHP_5_4/ext/standard/tests/streams/bug54946.phpt (rev 0) +++ php/php-src/branches/PHP_5_4/ext/standard/tests/streams/bug54946.phpt 2011-05-29 12:29:19 UTC (rev 311545) @@ -0,0 +1,40 @@ +--TEST-- +Bug#54946 stream_get_contents infinite loop +--FILE-- +<?php +$filename = tempnam(sys_get_temp_dir(), "phpbug"); + +$stream = fopen($filename, "w"); // w or a +$retval = stream_get_contents($stream, 1, 1); + +var_dump($retval); +unlink($filename); + + + +$filename = tempnam(sys_get_temp_dir(), "phpbug2"); + +$stream = fopen($filename, "a"); +$retval = stream_get_contents($stream, 1, 1); + +var_dump($retval); +unlink($filename); + + + +$filename = tempnam(sys_get_temp_dir(), "phpbug3"); + +$stream = fopen($filename, "a"); +fseek($stream, 1); +$retval = stream_get_contents($stream, 1); + +var_dump($retval); +unlink($filename); +?> +===DONE=== +--EXPECT-- +string(0) "" +string(0) "" +string(0) "" +===DONE=== + Modified: php/php-src/branches/PHP_5_4/main/streams/streams.c =================================================================== --- php/php-src/branches/PHP_5_4/main/streams/streams.c 2011-05-29 11:39:49 UTC (rev 311544) +++ php/php-src/branches/PHP_5_4/main/streams/streams.c 2011-05-29 12:29:19 UTC (rev 311545) @@ -1362,6 +1362,9 @@ ptr = *buf = pemalloc_rel_orig(maxlen + 1, persistent); while ((len < maxlen) && !php_stream_eof(src)) { ret = php_stream_read(src, ptr, maxlen - len); + if (!ret) { + break; + } len += ret; ptr += ret; } Added: php/php-src/trunk/ext/standard/tests/streams/bug54946.phpt =================================================================== --- php/php-src/trunk/ext/standard/tests/streams/bug54946.phpt (rev 0) +++ php/php-src/trunk/ext/standard/tests/streams/bug54946.phpt 2011-05-29 12:29:19 UTC (rev 311545) @@ -0,0 +1,40 @@ +--TEST-- +Bug#54946 stream_get_contents infinite loop +--FILE-- +<?php +$filename = tempnam(sys_get_temp_dir(), "phpbug"); + +$stream = fopen($filename, "w"); // w or a +$retval = stream_get_contents($stream, 1, 1); + +var_dump($retval); +unlink($filename); + + + +$filename = tempnam(sys_get_temp_dir(), "phpbug2"); + +$stream = fopen($filename, "a"); +$retval = stream_get_contents($stream, 1, 1); + +var_dump($retval); +unlink($filename); + + + +$filename = tempnam(sys_get_temp_dir(), "phpbug3"); + +$stream = fopen($filename, "a"); +fseek($stream, 1); +$retval = stream_get_contents($stream, 1); + +var_dump($retval); +unlink($filename); +?> +===DONE=== +--EXPECT-- +string(0) "" +string(0) "" +string(0) "" +===DONE=== + Modified: php/php-src/trunk/main/streams/streams.c =================================================================== --- php/php-src/trunk/main/streams/streams.c 2011-05-29 11:39:49 UTC (rev 311544) +++ php/php-src/trunk/main/streams/streams.c 2011-05-29 12:29:19 UTC (rev 311545) @@ -1362,6 +1362,9 @@ ptr = *buf = pemalloc_rel_orig(maxlen + 1, persistent); while ((len < maxlen) && !php_stream_eof(src)) { ret = php_stream_read(src, ptr, maxlen - len); + if (!ret) { + break; + } len += ret; ptr += ret; }
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php