svn: /php/php-src/ branches/PHP_5_3/NEWS branches/PHP_5_3/ext/standard/tests/streams/bug54946.phpt branches/PHP_5_3/main/streams/streams.c
branches/PHP_5_4/ext/standard/tests/streams/bug54946.phpt branches/PHP_5_4/main/streams/streams.c trunk/ext/standard/tests/streams/bug54946.phpt
trunk/main/streams/streams.c
| From: | Hannes Magnusson | Date: | Sun, 29 May 2011 12:29:19 +0000 |
| Subject: | svn: /php/php-src/ branches/PHP_5_3/NEWS branches/PHP_5_3/ext/standard/tests/streams/bug54946.phpt branches/PHP_5_3/main/streams/streams.c branches/PHP_5_4/ext/standard/tests/streams/bug54946.phpt branches/PHP_5_4/main/streams/streams.c trunk/ext/standard/tests/streams/bug54946.phpt trunk/main/streams/streams.c |
||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-65055@lists.php.net to get a copy of this message | ||
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;
}