mirror of
https://github.com/php/php-src.git
synced 2026-03-24 00:02:20 +01:00
Add LIBXML_RECOVER (#13504)
Setting the recovery option by using a hardcoded value (1) worked already for SimpleXML. For DOM, a small change is necessary because otherwise the recover field overwrites the recovery option. From a quick search on GitHub [1] it looks like this won't clash with existing PHP code as no one seems to define (or use) a constant with such a name. [1] https://github.com/search?q=LIBXML_RECOVER+language%3APHP&type=code&l=PHP
This commit is contained in:
3
NEWS
3
NEWS
@@ -70,6 +70,9 @@ PHP NEWS
|
||||
. Added LDAP_OPT_X_TLS_PROTOCOL_MAX/LDAP_OPT_X_TLS_PROTOCOL_TLS1_3
|
||||
constants. (StephenWall)
|
||||
|
||||
- LibXML:
|
||||
. Added LIBXML_RECOVER constant. (nielsdos)
|
||||
|
||||
- MBString:
|
||||
. Added mb_trim, mb_ltrim and mb_rtrim. (Yuya Hamada)
|
||||
|
||||
|
||||
@@ -484,6 +484,9 @@ PHP 8.4 UPGRADE NOTES
|
||||
. LDAP_OPT_X_TLS_PROTOCOL_MAX.
|
||||
. LDAP_OPT_X_TLS_PROTOCOL_TLS1_3.
|
||||
|
||||
- LibXML:
|
||||
. LIBXML_RECOVER.
|
||||
|
||||
- OpenSSL:
|
||||
. X509_PURPOSE_OCSP_HELPER.
|
||||
. X509_PURPOSE_TIMESTAMP_SIGN.
|
||||
|
||||
@@ -1261,7 +1261,7 @@ xmlDocPtr dom_document_parser(zval *id, dom_load_mode mode, const char *source,
|
||||
resolve_externals = doc_props->resolveexternals;
|
||||
keep_blanks = doc_props->preservewhitespace;
|
||||
substitute_ent = doc_props->substituteentities;
|
||||
recover = doc_props->recover;
|
||||
recover = doc_props->recover || (options & XML_PARSE_RECOVER) == XML_PARSE_RECOVER;
|
||||
|
||||
xmlInitParser();
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ dom
|
||||
<?php
|
||||
|
||||
$flags = [
|
||||
LIBXML_NOENT, LIBXML_DTDLOAD, LIBXML_DTDATTR, LIBXML_DTDVALID, LIBXML_NOERROR, LIBXML_NOWARNING, LIBXML_NOBLANKS, LIBXML_XINCLUDE, LIBXML_NSCLEAN, LIBXML_NOCDATA, LIBXML_NONET, LIBXML_PEDANTIC, LIBXML_COMPACT, LIBXML_PARSEHUGE, LIBXML_BIGLINES
|
||||
LIBXML_RECOVER, LIBXML_NOENT, LIBXML_DTDLOAD, LIBXML_DTDATTR, LIBXML_DTDVALID, LIBXML_NOERROR, LIBXML_NOWARNING, LIBXML_NOBLANKS, LIBXML_XINCLUDE, LIBXML_NSCLEAN, LIBXML_NOCDATA, LIBXML_NONET, LIBXML_PEDANTIC, LIBXML_COMPACT, LIBXML_PARSEHUGE, LIBXML_BIGLINES
|
||||
];
|
||||
|
||||
try {
|
||||
@@ -21,7 +21,8 @@ foreach ($flags as $flag) {
|
||||
|
||||
?>
|
||||
--EXPECT--
|
||||
DOM\XMLDocument::createFromString(): Argument #2 ($options) contains invalid flags (allowed flags: LIBXML_NOENT, LIBXML_DTDLOAD, LIBXML_DTDATTR, LIBXML_DTDVALID, LIBXML_NOERROR, LIBXML_NOWARNING, LIBXML_NOBLANKS, LIBXML_XINCLUDE, LIBXML_NSCLEAN, LIBXML_NOCDATA, LIBXML_NONET, LIBXML_PEDANTIC, LIBXML_COMPACT, LIBXML_PARSEHUGE, LIBXML_BIGLINES)bool(true)
|
||||
DOM\XMLDocument::createFromString(): Argument #2 ($options) contains invalid flags (allowed flags: LIBXML_RECOVER, LIBXML_NOENT, LIBXML_DTDLOAD, LIBXML_DTDATTR, LIBXML_DTDVALID, LIBXML_NOERROR, LIBXML_NOWARNING, LIBXML_NOBLANKS, LIBXML_XINCLUDE, LIBXML_NSCLEAN, LIBXML_NOCDATA, LIBXML_NONET, LIBXML_PEDANTIC, LIBXML_COMPACT, LIBXML_PARSEHUGE, LIBXML_BIGLINES)bool(true)
|
||||
bool(true)
|
||||
bool(true)
|
||||
bool(true)
|
||||
bool(true)
|
||||
|
||||
23
ext/dom/tests/xml_parsing_LIBXML_RECOVER.phpt
Normal file
23
ext/dom/tests/xml_parsing_LIBXML_RECOVER.phpt
Normal file
@@ -0,0 +1,23 @@
|
||||
--TEST--
|
||||
XML parsing with LIBXML_RECOVER
|
||||
--EXTENSIONS--
|
||||
dom
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
$dom = new DOMDocument;
|
||||
$dom->loadXML('<root><child/>', options: LIBXML_RECOVER);
|
||||
echo $dom->saveXML();
|
||||
|
||||
$dom = DOM\XMLDocument::createFromString('<root><child/>', options: LIBXML_RECOVER);
|
||||
echo $dom->saveXML(), "\n";
|
||||
|
||||
?>
|
||||
--EXPECTF--
|
||||
Warning: DOMDocument::loadXML(): %s
|
||||
<?xml version="1.0"?>
|
||||
<root><child/></root>
|
||||
|
||||
Warning: DOM\XMLDocument::createFromString(): %s
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<root><child/></root>
|
||||
@@ -25,7 +25,8 @@
|
||||
|
||||
static bool check_options_validity(uint32_t arg_num, zend_long options)
|
||||
{
|
||||
const zend_long VALID_OPTIONS = XML_PARSE_NOENT
|
||||
const zend_long VALID_OPTIONS = XML_PARSE_RECOVER
|
||||
| XML_PARSE_NOENT
|
||||
| XML_PARSE_DTDLOAD
|
||||
| XML_PARSE_DTDATTR
|
||||
| XML_PARSE_DTDVALID
|
||||
@@ -42,6 +43,7 @@ static bool check_options_validity(uint32_t arg_num, zend_long options)
|
||||
| XML_PARSE_BIG_LINES;
|
||||
if ((options & ~VALID_OPTIONS) != 0) {
|
||||
zend_argument_value_error(2, "contains invalid flags (allowed flags: "
|
||||
"LIBXML_RECOVER, "
|
||||
"LIBXML_NOENT, "
|
||||
"LIBXML_DTDLOAD, "
|
||||
"LIBXML_DTDATTR, "
|
||||
|
||||
@@ -18,6 +18,11 @@ const LIBXML_DOTTED_VERSION = UNKNOWN;
|
||||
*/
|
||||
const LIBXML_LOADED_VERSION = UNKNOWN;
|
||||
|
||||
/**
|
||||
* @var int
|
||||
* @cvalue XML_PARSE_RECOVER
|
||||
*/
|
||||
const LIBXML_RECOVER = UNKNOWN;
|
||||
/**
|
||||
* @var int
|
||||
* @cvalue XML_PARSE_NOENT
|
||||
|
||||
3
ext/libxml/libxml_arginfo.h
generated
3
ext/libxml/libxml_arginfo.h
generated
@@ -1,5 +1,5 @@
|
||||
/* This is a generated file, edit the .stub.php file instead.
|
||||
* Stub hash: 98cdd082ed214f84fd741097dd58979accc37bff */
|
||||
* Stub hash: 08e4e3f10ba89430292831f50c4760a362593282 */
|
||||
|
||||
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_libxml_set_streams_context, 0, 1, IS_VOID, 0)
|
||||
ZEND_ARG_INFO(0, context)
|
||||
@@ -59,6 +59,7 @@ static void register_libxml_symbols(int module_number)
|
||||
REGISTER_LONG_CONSTANT("LIBXML_VERSION", LIBXML_VERSION, CONST_PERSISTENT);
|
||||
REGISTER_STRING_CONSTANT("LIBXML_DOTTED_VERSION", LIBXML_DOTTED_VERSION, CONST_PERSISTENT);
|
||||
REGISTER_STRING_CONSTANT("LIBXML_LOADED_VERSION", PHP_LIBXML_LOADED_VERSION, CONST_PERSISTENT);
|
||||
REGISTER_LONG_CONSTANT("LIBXML_RECOVER", XML_PARSE_RECOVER, CONST_PERSISTENT);
|
||||
REGISTER_LONG_CONSTANT("LIBXML_NOENT", XML_PARSE_NOENT, CONST_PERSISTENT);
|
||||
REGISTER_LONG_CONSTANT("LIBXML_DTDLOAD", XML_PARSE_DTDLOAD, CONST_PERSISTENT);
|
||||
REGISTER_LONG_CONSTANT("LIBXML_DTDATTR", XML_PARSE_DTDATTR, CONST_PERSISTENT);
|
||||
|
||||
21
ext/simplexml/tests/xml_parsing_LIBXML_RECOVER.phpt
Normal file
21
ext/simplexml/tests/xml_parsing_LIBXML_RECOVER.phpt
Normal file
@@ -0,0 +1,21 @@
|
||||
--TEST--
|
||||
XML parsing with LIBXML_RECOVER
|
||||
--EXTENSIONS--
|
||||
simplexml
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
var_dump(simplexml_load_string('<root><child/>', options: LIBXML_RECOVER));
|
||||
|
||||
?>
|
||||
--EXPECTF--
|
||||
Warning: simplexml_load_string(): %s
|
||||
|
||||
Warning: simplexml_load_string(): <root><child/> in %s on line %d
|
||||
|
||||
Warning: simplexml_load_string(): ^ in %s on line %d
|
||||
object(SimpleXMLElement)#1 (1) {
|
||||
["child"]=>
|
||||
object(SimpleXMLElement)#2 (0) {
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user