Skip to content

Commit

Permalink
Merge branch 'PHP-8.3'
Browse files Browse the repository at this point in the history
* PHP-8.3:
  Fix phpGH-12167 and phpGH-12169: Unable to get comment or processing instruction contents in SimpleXML
  • Loading branch information
nielsdos committed Sep 25, 2023
2 parents 9b6afd8 + 190a535 commit 2e8cdd8
Show file tree
Hide file tree
Showing 3 changed files with 51 additions and 1 deletion.
6 changes: 5 additions & 1 deletion ext/simplexml/simplexml.c
Original file line number Diff line number Diff line change
Expand Up @@ -1789,6 +1789,7 @@ static zend_result sxe_object_cast_ex(zend_object *readobj, zval *writeobj, int
{
php_sxe_object *sxe;
xmlChar *contents = NULL;
bool free_contents = true;
xmlNodePtr node;
zend_result rv;

Expand Down Expand Up @@ -1819,13 +1820,16 @@ static zend_result sxe_object_cast_ex(zend_object *readobj, zval *writeobj, int
if (sxe->node && sxe->node->node) {
if (sxe->node->node->children) {
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);

if (contents) {
if (contents && free_contents) {
xmlFree(contents);
}

Expand Down
23 changes: 23 additions & 0 deletions ext/simplexml/tests/gh12167.phpt
Original file line number Diff line number Diff line change
@@ -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 changes: 23 additions & 0 deletions ext/simplexml/tests/gh12169.phpt
Original file line number Diff line number Diff line change
@@ -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 "

0 comments on commit 2e8cdd8

Please sign in to comment.