Bug #78326 [Com]: improper memory deallocation on stream_get_contents() with fixed lenght buffer
| From: | albertcasademont at gmail dot com | Date: | Tue, 23 Jul 2019 12:05:59 +0000 |
| Subject: | Bug #78326 [Com]: improper memory deallocation on stream_get_contents() with fixed lenght buffer | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-221908@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=78326&edit=1
ID: 78326
Comment by: albertcasademont at gmail dot com
Reported by: albertcasademont at gmail dot com
Summary: improper memory deallocation on
stream_get_contents() with fixed lenght buffer
Status: Open
Type: Bug
Package: Streams related
Operating System: Alpine Linux 3.10
PHP Version: 7.2.21RC1
Block user comment: N
Private report: N
New Comment:
PR: https://github.com/php/php-src/pull/4464
Previous Comments:
------------------------------------------------------------------------
[2019-07-23 12:02:01] albertcasademont at gmail dot com
Description:
------------
When calling stream_get_contents() with a fixed length buffer, the memory allocated for that buffer
is not freed even though the actual data might be much shorter than the allocated buffer. This can
potentially crash the script just after a couple of stream_get_contents() calls due to memory
issues.
If we don't specify a fixed lenght buffer, php will correctly reallocate the string to the
exact amount of data read. This would also be the expected thing to do even if we fix the buffer
length.
Test script:
---------------
<?php
$f = tmpfile();
fwrite($f, '.');
$chunks = array();
for ($i = 0; $i < 1000; ++$i) {
rewind($f);
$chunks[] = stream_get_contents($f, 1000000);
}
var_dump(count($chunks));
Expected result:
----------------
int(1000)
Actual result:
--------------
Fatal error: Allowed memory size of 67108864 bytes exhausted (tried to allocate 1003520 bytes) in
/in/HP2U9 on line 9
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=78326&edit=1