|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
PatchesPull Requests
Pull requests:
HistoryAllCommentsChangesGit/SVN commits
[2021-05-22 10:53 UTC] pvandommelen at gmail dot com
-Summary: Regression in 7.4.6 when yielding an array based
generator
+Summary: Integer underflow in memory limit comparison
[2021-05-22 10:53 UTC] pvandommelen at gmail dot com
[2021-05-24 09:40 UTC] pvandommelen at gmail dot com
[2021-05-31 13:25 UTC] git@php.net
[2021-05-31 13:25 UTC] git@php.net
-Status: Open
+Status: Closed
|
|||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Fri Oct 24 08:00:01 2025 UTC |
Description: ------------ When more memory is allocated, the currently allocated memory is compared to the limit. There is currently an integer underflow problem when the limit is lower than the currently allocated memory. This can occur when the memory limit is changed dynamically through `set_ini("memory_limit", ..)`. This was introduced in 7.2.23 and also exists in 7.3.10 and all versions of 7.4 and 8.0. https://github.com/php/php-src/commit/16d35eb643bf974554e5264021ee10fc969e2053 The code sample illustrates the problem. Allocation after the memory limit is reduced should throw an error. The old behaviour can probably be reintroduced by also verifying that the memory limit is higher than the currently allocated memory. Test script: --------------- https://3v4l.org/egq60 ``` <?php echo sprintf("\n%.1fMB", memory_get_usage(true) / 1024 / 1024); // allocate a large byte string of around 5 MB $a = str_repeat("0", 5 * 1024 * 1024); echo sprintf("\n%.1fMB", memory_get_usage(true) / 1024 / 1024); // setting the memory limit lower than the current is accepted ini_set("memory_limit", "3M"); echo sprintf("\n%.1fMB", memory_get_usage(true) / 1024 / 1024); // further allocation beyond the limit $b = str_repeat("0", 5 * 1024 * 1024); echo sprintf("\n%.1fMB", memory_get_usage(true) / 1024 / 1024); ```