Files
php-src/ext/xmlreader/tests/oom_xmlreader_readstring.phpt
3584a98bda Avoid state corruption via bailout
- Replace bailout on OOM with UnwindExit
- Properly reset various globals that may be accessed during startup

Fix GHSA-w8hw-w9fx-j79w (CVE-2026-109618)
Fix GHSA-6wmf-4rv5-p3rp (CVE-2026-109619)

Co-authored-by: Ilija Tovilo <ilija.tovilo@me.com>
Co-authored-by: Jakub Zelenka <bukka@php.net>
Co-authored-by: Nora Dossche <7771979+ndossche@users.noreply.github.com>
Co-authored-by: Nicolas Grekas <nicolas.grekas@gmail.com>
2026-10-21 16:06:22 +02:00

37 lines
966 B
PHP

--TEST--
XMLReader::readString() doesn't reach hard limit
--EXTENSIONS--
xmlreader
--INI--
memory_limit=2M
--SKIPIF--
<?php
if (getenv('SKIP_ASAN') && LIBXML_VERSION < 21000) die('skip xmlTextReaderReadString() in versions <2.10.0 is slow under ASan');
?>
--FILE--
<?php
$path = __DIR__ . '/' . basename(__FILE__, '.php') . '.tmp';
$fp = fopen($path, 'wb');
/* ~11 MB of small elements: no single node is huge, but the whole
* subtree is, and it is serialized into one Zend string. */
$piece = str_repeat("<a>xxxxxxxx</a>", 32768);
fwrite($fp, "<r>");
for ($i = 0; $i < 12; $i++) {
fwrite($fp, $piece);
}
fwrite($fp, "</r>");
unset($piece);
fclose($fp);
$reader = XMLReader::open($path);
$reader->read();
$reader->readString();
echo "not reached\n";
?>
--CLEAN--
<?php
@unlink(__DIR__ . '/' . basename(__FILE__, '.clean.php') . '.tmp');
?>
--EXPECTF--
Fatal error: Allowed memory size of 2097152 bytes exhausted %S(tried to allocate %d bytes) in %s on line %d