mirror of
https://github.com/php/php-src.git
synced 2024-09-21 18:07:23 +00:00
Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3: Fixed bug #78902 Add unit test for bug #78902
This commit is contained in:
commit
6489e29831
3
NEWS
3
NEWS
@ -37,6 +37,9 @@ PHP NEWS
|
||||
. Fixed bug #79115 (ReflectionClass::isCloneable call reflected class
|
||||
__destruct). (Nikita)
|
||||
|
||||
- Standard:
|
||||
. Fixed bug #78902 (Memory leak when using stream_filter_append). (liudaixiao)
|
||||
|
||||
23 Jan 2020, PHP 7.4.2
|
||||
|
||||
- Core:
|
||||
|
28
ext/standard/tests/streams/bug78902.phpt
Normal file
28
ext/standard/tests/streams/bug78902.phpt
Normal file
@ -0,0 +1,28 @@
|
||||
--TEST--
|
||||
Bug #78902: Memory leak when using stream_filter_append
|
||||
--INI--
|
||||
memory_limit=512k
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
/** create temporary file 2mb file */
|
||||
$tmp_file_name = tempnam(sys_get_temp_dir(), 'test_');
|
||||
$fp = fopen($tmp_file_name, 'w+');
|
||||
$size = 1024 * 1024 * 2; // 2mb
|
||||
$chunk = 1024;
|
||||
while ($size > 0) {
|
||||
fputs($fp, str_pad('', min($chunk,$size)));
|
||||
$size -= $chunk;
|
||||
}
|
||||
fclose($fp);
|
||||
|
||||
$fp = fopen($tmp_file_name, 'r');
|
||||
stream_filter_append($fp, "string.toupper");
|
||||
while (!feof($fp)) {
|
||||
fread($fp, 1);
|
||||
}
|
||||
fclose($fp);
|
||||
var_dump(true);
|
||||
?>
|
||||
--EXPECT--
|
||||
bool(true)
|
@ -590,8 +590,15 @@ PHPAPI int _php_stream_fill_read_buffer(php_stream *stream, size_t size)
|
||||
* stream read buffer */
|
||||
while (brig_inp->head) {
|
||||
bucket = brig_inp->head;
|
||||
/* grow buffer to hold this bucket
|
||||
* TODO: this can fail for persistent streams */
|
||||
/* reduce buffer memory consumption if possible, to avoid a realloc */
|
||||
if (stream->readbuf && stream->readbuflen - stream->writepos < bucket->buflen) {
|
||||
if (stream->writepos > stream->readpos) {
|
||||
memmove(stream->readbuf, stream->readbuf + stream->readpos, stream->writepos - stream->readpos);
|
||||
}
|
||||
stream->writepos -= stream->readpos;
|
||||
stream->readpos = 0;
|
||||
}
|
||||
/* grow buffer to hold this bucket */
|
||||
if (stream->readbuflen - stream->writepos < bucket->buflen) {
|
||||
stream->readbuflen += bucket->buflen;
|
||||
stream->readbuf = perealloc(stream->readbuf, stream->readbuflen,
|
||||
|
Loading…
Reference in New Issue
Block a user