diff --git a/ext/xmlreader/php_xmlreader.c b/ext/xmlreader/php_xmlreader.c index 20960d96d5f03..06f569949ceef 100644 --- a/ext/xmlreader/php_xmlreader.c +++ b/ext/xmlreader/php_xmlreader.c @@ -873,6 +873,11 @@ PHP_METHOD(xmlreader, open) RETURN_FALSE; } + if (encoding && CHECK_NULL_PATH(encoding, encoding_len)) { + php_error_docref(NULL, E_WARNING, "Encoding must not contain NUL bytes"); + RETURN_FALSE; + } + valid_file = _xmlreader_get_valid_file_path(source, resolved_path, MAXPATHLEN ); if (valid_file) { @@ -1055,6 +1060,11 @@ PHP_METHOD(xmlreader, XML) RETURN_FALSE; } + if (encoding && CHECK_NULL_PATH(encoding, encoding_len)) { + php_error_docref(NULL, E_WARNING, "Encoding must not contain NUL bytes"); + RETURN_FALSE; + } + inputbfr = xmlParserInputBufferCreateMem(source, source_len, XML_CHAR_ENCODING_NONE); if (inputbfr != NULL) { diff --git a/ext/xmlreader/tests/bug73246.phpt b/ext/xmlreader/tests/bug73246.phpt new file mode 100644 index 0000000000000..809902adb0614 --- /dev/null +++ b/ext/xmlreader/tests/bug73246.phpt @@ -0,0 +1,16 @@ +--TEST-- +Bug #73246 (XMLReader: encoding length not checked) +--SKIPIF-- + +--FILE-- +open(__FILE__, "UTF\0-8"); +$reader->XML('', "UTF\0-8"); +?> +--EXPECTF-- +Warning: XMLReader::open(): Encoding must not contain NUL bytes in %s on line %d + +Warning: XMLReader::XML(): Encoding must not contain NUL bytes in %s on line %d