diff options
-rw-r--r-- | ext/standard/streamsfuncs.c | 2 | ||||
-rw-r--r-- | ext/standard/tests/streams/bug46426.phpt | 18 |
2 files changed, 16 insertions, 4 deletions
diff --git a/ext/standard/streamsfuncs.c b/ext/standard/streamsfuncs.c index 505469c7dd..92e4f2d40c 100644 --- a/ext/standard/streamsfuncs.c +++ b/ext/standard/streamsfuncs.c @@ -411,7 +411,7 @@ PHP_FUNCTION(stream_get_contents) php_stream_from_zval(stream, &zsrc); - if (pos >= 0 && php_stream_seek(stream, pos, SEEK_SET) < 0) { + if ((pos > 0 || (pos == 0 && ZEND_NUM_ARGS() > 2)) && php_stream_seek(stream, pos, SEEK_SET) < 0) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Failed to seek to position %ld in the stream", pos); RETURN_FALSE; } diff --git a/ext/standard/tests/streams/bug46426.phpt b/ext/standard/tests/streams/bug46426.phpt index 05bc9c1e3c..8c95ea456e 100644 --- a/ext/standard/tests/streams/bug46426.phpt +++ b/ext/standard/tests/streams/bug46426.phpt @@ -7,16 +7,28 @@ $tmp = tmpfile(); fwrite($tmp, "12345"); -echo stream_get_contents($tmp, -1, 0); +echo stream_get_contents($tmp, 2, 1); +echo "\n"; +echo stream_get_contents($tmp, -1); echo "\n"; -echo stream_get_contents($tmp, -1, 1); +echo stream_get_contents($tmp, -1, 0); echo "\n"; echo stream_get_contents($tmp, -1, 2); +echo "\n"; +echo stream_get_contents($tmp, 0, 0); +echo "\n"; +echo stream_get_contents($tmp, 1, 0); +echo "\n"; +echo stream_get_contents($tmp, -1); @unlink($tmp); ?> --EXPECT-- +23 +45 12345 -2345 345 + +1 +2345 |