mirror of
https://github.com/php/php-src.git
synced 2025-08-16 05:58:45 +02:00
Fix GH-12167 and GH-12169: Unable to get comment or processing instruction contents in SimpleXML
Closes GH-12289.
This commit is contained in:
parent
d65c80031a
commit
82a84d0b7b
4 changed files with 55 additions and 1 deletions
4
NEWS
4
NEWS
|
@ -35,6 +35,10 @@ PHP NEWS
|
||||||
. Fixed bug GH-12208 (SimpleXML infinite loop when a cast is used inside a
|
. Fixed bug GH-12208 (SimpleXML infinite loop when a cast is used inside a
|
||||||
foreach). (nielsdos)
|
foreach). (nielsdos)
|
||||||
. Fixed bug #55098 (SimpleXML iteration produces infinite loop). (nielsdos)
|
. Fixed bug #55098 (SimpleXML iteration produces infinite loop). (nielsdos)
|
||||||
|
. Fixed bug GH-12167 (Unable to get processing instruction contents in
|
||||||
|
SimpleXML). (nielsdos)
|
||||||
|
. Fixed bug GH-12169 (Unable to get comment contents in SimpleXML).
|
||||||
|
(nielsdos)
|
||||||
|
|
||||||
- Streams:
|
- Streams:
|
||||||
. Fixed bug GH-12190 (binding ipv4 address with both address and port at 0).
|
. Fixed bug GH-12190 (binding ipv4 address with both address and port at 0).
|
||||||
|
|
|
@ -1835,6 +1835,7 @@ static int sxe_object_cast_ex(zend_object *readobj, zval *writeobj, int type)
|
||||||
{
|
{
|
||||||
php_sxe_object *sxe;
|
php_sxe_object *sxe;
|
||||||
xmlChar *contents = NULL;
|
xmlChar *contents = NULL;
|
||||||
|
bool free_contents = true;
|
||||||
xmlNodePtr node;
|
xmlNodePtr node;
|
||||||
int rv;
|
int rv;
|
||||||
|
|
||||||
|
@ -1865,13 +1866,16 @@ static int sxe_object_cast_ex(zend_object *readobj, zval *writeobj, int type)
|
||||||
if (sxe->node && sxe->node->node) {
|
if (sxe->node && sxe->node->node) {
|
||||||
if (sxe->node->node->children) {
|
if (sxe->node->node->children) {
|
||||||
contents = xmlNodeListGetString((xmlDocPtr) sxe->document->ptr, sxe->node->node->children, 1);
|
contents = xmlNodeListGetString((xmlDocPtr) sxe->document->ptr, sxe->node->node->children, 1);
|
||||||
|
} else if (sxe->node->node->type == XML_COMMENT_NODE || sxe->node->node->type == XML_PI_NODE) {
|
||||||
|
contents = sxe->node->node->content;
|
||||||
|
free_contents = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
rv = cast_object(writeobj, type, (char *)contents);
|
rv = cast_object(writeobj, type, (char *)contents);
|
||||||
|
|
||||||
if (contents) {
|
if (contents && free_contents) {
|
||||||
xmlFree(contents);
|
xmlFree(contents);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
23
ext/simplexml/tests/gh12167.phpt
Normal file
23
ext/simplexml/tests/gh12167.phpt
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
--TEST--
|
||||||
|
GH-12167 (Unable to get processing instruction contents in SimpleXML)
|
||||||
|
--EXTENSIONS--
|
||||||
|
simplexml
|
||||||
|
--FILE--
|
||||||
|
<?php
|
||||||
|
|
||||||
|
$xml = <<<XML
|
||||||
|
<?xml version="1.0"?>
|
||||||
|
<container>
|
||||||
|
<?foo pi contents ?>
|
||||||
|
</container>
|
||||||
|
XML;
|
||||||
|
|
||||||
|
$sxe = simplexml_load_string($xml);
|
||||||
|
|
||||||
|
var_dump($sxe->xpath("//processing-instruction()")[0]->getName());
|
||||||
|
var_dump((string) $sxe->xpath("//processing-instruction()")[0]);
|
||||||
|
|
||||||
|
?>
|
||||||
|
--EXPECT--
|
||||||
|
string(3) "foo"
|
||||||
|
string(12) "pi contents "
|
23
ext/simplexml/tests/gh12169.phpt
Normal file
23
ext/simplexml/tests/gh12169.phpt
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
--TEST--
|
||||||
|
GH-12169 (Unable to get comment contents in SimpleXML)
|
||||||
|
--EXTENSIONS--
|
||||||
|
simplexml
|
||||||
|
--FILE--
|
||||||
|
<?php
|
||||||
|
|
||||||
|
$xml = <<<XML
|
||||||
|
<?xml version="1.0"?>
|
||||||
|
<container>
|
||||||
|
<!-- comment contents -->
|
||||||
|
</container>
|
||||||
|
XML;
|
||||||
|
|
||||||
|
$sxe = simplexml_load_string($xml);
|
||||||
|
|
||||||
|
var_dump($sxe->xpath("//comment()")[0]->getName());
|
||||||
|
var_dump((string) $sxe->xpath("//comment()")[0]);
|
||||||
|
|
||||||
|
?>
|
||||||
|
--EXPECT--
|
||||||
|
string(7) "comment"
|
||||||
|
string(18) " comment contents "
|
Loading…
Add table
Add a link
Reference in a new issue