php-src/ext/xml
Niels Dossche 0675edb933
Sanitize libxml2 globals before parsing
Fixes GHSA-3qrf-m4j2-pcrr.

To parse a document with libxml2, you first need to create a parsing context.
The parsing context contains parsing options (e.g. XML_NOENT to substitute
entities) that the application (in this case PHP) can set.
Unfortunately, libxml2 also supports providing default set options.
For example, if you call xmlSubstituteEntitiesDefault(1) then the XML_NOENT
option will be added to the parsing options every time you create a parsing
context **even if the application never requested XML_NOENT**.

Third party extensions can override these globals, in particular the
substitute entity global. This causes entity substitution to be
unexpectedly active.

Fix it by setting the parsing options to a sane known value.
For API calls that depend on global state we introduce
PHP_LIBXML_SANITIZE_GLOBALS() and PHP_LIBXML_RESTORE_GLOBALS().
For other APIs that work directly with a context we introduce
php_libxml_sanitize_parse_ctxt_options().
2023-07-31 15:40:48 -05:00
..
tests Fix GH-11160: Few tests failed building with new libxml 2.11.0 2023-05-06 23:10:07 +02:00
compat.c Sanitize libxml2 globals before parsing 2023-07-31 15:40:48 -05:00
config.m4 Use a common setup macro to detect the Expat library 2019-06-04 10:10:50 +02:00
config.w32 Remove unused Git attributes ident 2018-07-25 00:53:25 +02:00
CREDITS
expat_compat.h Update http->https in license (#6945) 2021-05-06 12:16:35 +02:00
php_xml.h Update http->https in license (#6945) 2021-05-06 12:16:35 +02:00
xml.c The userland constants do not start with PHP_ 2023-02-26 14:18:12 +00:00
xml.stub.php Generate optimizer func info from stubs for various extensions (#7409) 2021-08-26 19:52:11 +02:00
xml_arginfo.h Generate optimizer func info from stubs for various extensions (#7409) 2021-08-26 19:52:11 +02:00