mirror of
https://github.com/php/php-src.git
synced 2024-11-24 10:24:11 +08:00
Merge branch 'PHP-7.2' into PHP-7.3
* PHP-7.2: Fix #76859 stream_get_line skips data if used with data-generating filter
This commit is contained in:
commit
5b1bb23edf
2
NEWS
2
NEWS
@ -33,6 +33,8 @@ PHP NEWS
|
||||
(Thomas Calvet)
|
||||
. Fixed bug #78612 (strtr leaks memory when integer keys are used and the
|
||||
subject string shorter). (Nikita)
|
||||
. Fixed bug #76859 (stream_get_line skips data if used with data-generating
|
||||
filter). (kkopachev)
|
||||
|
||||
26 Sep 2019, PHP 7.3.10
|
||||
|
||||
|
14
ext/standard/tests/streams/bug46147.phpt
Normal file
14
ext/standard/tests/streams/bug46147.phpt
Normal file
@ -0,0 +1,14 @@
|
||||
--TEST--
|
||||
Bug #46147 (after stream seek, appending stream filter reads incorrect data)
|
||||
--FILE--
|
||||
<?php
|
||||
$fp = tmpfile();
|
||||
fwrite($fp, "this is a lowercase string.\n");
|
||||
fseek($fp, 5);
|
||||
stream_filter_append($fp, "string.toupper");
|
||||
while (!feof($fp)) {
|
||||
echo fread($fp, 5);
|
||||
}
|
||||
|
||||
--EXPECT--
|
||||
IS A LOWERCASE STRING.
|
22
ext/standard/tests/streams/bug76859.phpt
Normal file
22
ext/standard/tests/streams/bug76859.phpt
Normal file
@ -0,0 +1,22 @@
|
||||
--TEST--
|
||||
Bug #76859 (stream_get_line skips data if used with filters)
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
$data = '123';
|
||||
|
||||
$fh = fopen('php://memory', 'r+b');
|
||||
fwrite($fh, $data);
|
||||
rewind($fh);
|
||||
stream_filter_append($fh, 'string.rot13', STREAM_FILTER_READ);
|
||||
|
||||
$out = '';
|
||||
while (!feof($fh)) {
|
||||
$out .= stream_get_line($fh, 1024);
|
||||
}
|
||||
|
||||
fclose($fh);
|
||||
|
||||
echo strlen($out) . "\n";
|
||||
--EXPECT--
|
||||
3
|
@ -359,8 +359,6 @@ PHPAPI int php_stream_filter_append_ex(php_stream_filter_chain *chain, php_strea
|
||||
case PSFS_PASS_ON:
|
||||
/* If any data is consumed, we cannot rely upon the existing read buffer,
|
||||
as the filtered data must replace the existing data, so invalidate the cache */
|
||||
/* note that changes here should be reflected in
|
||||
main/streams/streams.c::php_stream_fill_read_buffer */
|
||||
stream->writepos = 0;
|
||||
stream->readpos = 0;
|
||||
|
||||
|
@ -524,10 +524,6 @@ PHPAPI void _php_stream_fill_read_buffer(php_stream *stream, size_t size)
|
||||
php_stream_bucket_brigade brig_in = { NULL, NULL }, brig_out = { NULL, NULL };
|
||||
php_stream_bucket_brigade *brig_inp = &brig_in, *brig_outp = &brig_out, *brig_swap;
|
||||
|
||||
/* Invalidate the existing cache, otherwise reads can fail, see note in
|
||||
main/streams/filter.c::_php_stream_filter_append */
|
||||
stream->writepos = stream->readpos = 0;
|
||||
|
||||
/* allocate a buffer for reading chunks */
|
||||
chunk_buf = emalloc(stream->chunk_size);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user