diff options
| -rw-r--r-- | NEWS | 2 | ||||
| -rw-r--r-- | ext/standard/tests/file/bug38086.phpt | 46 | ||||
| -rw-r--r-- | ext/standard/tests/file/bug38086.txt | 5 | ||||
| -rw-r--r-- | ext/standard/tests/file/stream_copy_to_stream.phpt | 129 | ||||
| -rwxr-xr-x | main/streams/streams.c | 6 |
5 files changed, 183 insertions, 5 deletions
@@ -82,6 +82,8 @@ PHP NEWS - Fixed memory leaks in openssl streams context options. (Pierre) - Fixed handling of extremely long paths inside tempnam() function. (Ilia) +- Fixed bug #38086 (stream_copy_to_stream() returns 0 when maxlen is bigger + than the actual length). (Tony) - Fixed bug #38072 (boolean arg for mysqli_autocommit() is always true on Solaris). (Tony) - Fixed bug #38067 (Parameters are not decoded from utf-8 when using encoding diff --git a/ext/standard/tests/file/bug38086.phpt b/ext/standard/tests/file/bug38086.phpt new file mode 100644 index 0000000000..ed8af75a4f --- /dev/null +++ b/ext/standard/tests/file/bug38086.phpt @@ -0,0 +1,46 @@ +--TEST-- +Bug #38086 (stream_copy_to_stream() returns 0 when maxlen is bigger than the actual length) +--FILE-- +<?php + +$initial_file = dirname(__FILE__).'/bug38086.txt'; +$new_file = dirname(__FILE__).'/bug38086_1.txt'; + +$src = fopen($initial_file, 'r'); +stream_filter_append($src, "string.rot13", STREAM_FILTER_READ); + +$dest = fopen($new_file, 'w'); +var_dump(stream_copy_to_stream($src, $dest)); +fclose($src); fclose($dest); + +var_dump(file_get_contents($new_file)); +unlink($new_file); + +$src = fopen($initial_file, 'r'); +stream_filter_append($src, "string.rot13", STREAM_FILTER_READ); + +$dest = fopen($new_file, 'w'); +var_dump(stream_copy_to_stream($src, $dest, 10000)); +fclose($src); fclose($dest); + +var_dump(file_get_contents($new_file)); +unlink($new_file); + +echo "Done\n"; +?> +--EXPECTF-- +int(134) +string(134) "Nabgure qnl +Jura gur cnvaf bs yvsr jba'g one zl jnl +V'yy oernx gurfr punvaf +Gung ubyq zr qbja +V'yy grne lbh qbja vagb zl cevingr uryy +" +int(134) +string(134) "Nabgure qnl +Jura gur cnvaf bs yvsr jba'g one zl jnl +V'yy oernx gurfr punvaf +Gung ubyq zr qbja +V'yy grne lbh qbja vagb zl cevingr uryy +" +Done diff --git a/ext/standard/tests/file/bug38086.txt b/ext/standard/tests/file/bug38086.txt new file mode 100644 index 0000000000..8e324724cb --- /dev/null +++ b/ext/standard/tests/file/bug38086.txt @@ -0,0 +1,5 @@ +Another day +When the pains of life won't bar my way +I'll break these chains +That hold me down +I'll tear you down into my private hell diff --git a/ext/standard/tests/file/stream_copy_to_stream.phpt b/ext/standard/tests/file/stream_copy_to_stream.phpt new file mode 100644 index 0000000000..3f46eec0cd --- /dev/null +++ b/ext/standard/tests/file/stream_copy_to_stream.phpt @@ -0,0 +1,129 @@ +--TEST-- +stream_copy_to_stream() tests +--FILE-- +<?php + +$initial_file = dirname(__FILE__).'/bug38086.txt'; +$new_file = dirname(__FILE__).'/bug38086_1.txt'; + +$src = fopen($initial_file, 'r'); +stream_filter_append($src, "string.rot13", STREAM_FILTER_READ); + +$dest = fopen($new_file, 'w'); +var_dump(stream_copy_to_stream($src, $dest, 0)); +fclose($src); fclose($dest); + +var_dump(file_get_contents($new_file)); +unlink($new_file); + +/* --- */ + +$src = fopen($initial_file, 'r'); +stream_filter_append($src, "string.rot13", STREAM_FILTER_READ); + +$dest = fopen($new_file, 'w'); +var_dump(stream_copy_to_stream($src, $dest, -1)); +fclose($src); fclose($dest); + +var_dump(file_get_contents($new_file)); +unlink($new_file); + +/* --- */ + +$src = fopen($initial_file, 'r'); +stream_filter_append($src, "string.rot13", STREAM_FILTER_READ); + +$dest = fopen($new_file, 'w'); +var_dump(stream_copy_to_stream($src, $dest)); +fclose($src); fclose($dest); + +var_dump(file_get_contents($new_file)); +unlink($new_file); + +/* --- */ + +$src = fopen($initial_file, 'r'); + +$dest = fopen($new_file, 'w'); +var_dump(stream_copy_to_stream($src, $dest)); +fclose($src); fclose($dest); + +var_dump(file_get_contents($new_file)); +unlink($new_file); + +/* --- */ + +$src = fopen($initial_file, 'r'); + +$dest = fopen($new_file, 'w'); +var_dump(stream_copy_to_stream($src, $dest, 1000000)); +fclose($src); fclose($dest); + +var_dump(file_get_contents($new_file)); +unlink($new_file); + +/* --- */ + +$src = fopen($initial_file, 'r'); + +$dest = fopen($new_file, 'w'); +var_dump(stream_copy_to_stream($src, $dest, 10)); +fclose($src); fclose($dest); + +var_dump(file_get_contents($new_file)); +unlink($new_file); + +/* --- */ + +$src = fopen($initial_file, 'r'); + +$dest = fopen($new_file, 'w'); +var_dump(stream_copy_to_stream($src, $dest, -1)); +fclose($src); fclose($dest); + +var_dump(file_get_contents($new_file)); +unlink($new_file); + +echo "Done\n"; +?> +--EXPECTF-- +int(0) +string(0) "" +int(134) +string(134) "Nabgure qnl +Jura gur cnvaf bs yvsr jba'g one zl jnl +V'yy oernx gurfr punvaf +Gung ubyq zr qbja +V'yy grne lbh qbja vagb zl cevingr uryy +" +int(134) +string(134) "Nabgure qnl +Jura gur cnvaf bs yvsr jba'g one zl jnl +V'yy oernx gurfr punvaf +Gung ubyq zr qbja +V'yy grne lbh qbja vagb zl cevingr uryy +" +int(134) +string(134) "Another day +When the pains of life won't bar my way +I'll break these chains +That hold me down +I'll tear you down into my private hell +" +int(134) +string(134) "Another day +When the pains of life won't bar my way +I'll break these chains +That hold me down +I'll tear you down into my private hell +" +int(10) +string(10) "Another da" +int(134) +string(134) "Another day +When the pains of life won't bar my way +I'll break these chains +That hold me down +I'll tear you down into my private hell +" +Done diff --git a/main/streams/streams.c b/main/streams/streams.c index 1f087f8879..12a6fa4d29 100755 --- a/main/streams/streams.c +++ b/main/streams/streams.c @@ -1348,11 +1348,7 @@ PHPAPI size_t _php_stream_copy_to_stream(php_stream *src, php_stream *dest, size writeptr += didwrite; } } else { - if (maxlen == 0) { - return haveread; - } else { - return 0; /* error */ - } + return haveread; } if (maxlen - haveread == 0) { |
