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:
Nikita Popov 2020-01-23 14:58:01 +01:00
commit 6489e29831
3 changed files with 40 additions and 2 deletions

3
NEWS
View File

@ -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:

View 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)

View File

@ -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,