Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit e0a2e2e

Browse files
Fix GH-15123: var_dump doesn't actually work on XMLReader (#15130)
1 parent 2b97c84 commit e0a2e2e

File tree

5 files changed

+114
-39
lines changed

5 files changed

+114
-39
lines changed

‎NEWS‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,10 @@ PHP NEWS
6464
. Add tidyNode::getNextSibling() and tidyNode::getPreviousSibling().
6565
(nielsdos)
6666

67+
- XMLReader:
68+
. Fixed bug GH-15123 (var_dump doesn't actually work on XMLReader).
69+
(nielsdos)
70+
6771
- XSL:
6872
. Fix trampoline leak in xpath callables. (nielsdos)
6973

‎ext/xmlreader/php_xmlreader.c‎

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ static int xmlreader_property_reader(xmlreader_object *obj, xmlreader_prop_handl
8181
if (hnd->read_int_func) {
8282
retint = hnd->read_int_func(obj->ptr);
8383
if (retint == -1) {
84-
zend_throw_error(NULL, "Failed to read property due to libxml error");
84+
zend_throw_error(NULL, "Failed to read property because no XML data has been read yet");
8585
return FAILURE;
8686
}
8787
}
@@ -175,6 +175,28 @@ static zend_function *xmlreader_get_method(zend_object **obj, zend_string *name,
175175
}
176176
/* }}} */
177177

178+
static HashTable* xmlreader_get_debug_info(zend_object *object, int *is_temp)
179+
{
180+
*is_temp = 1;
181+
182+
xmlreader_object *obj = php_xmlreader_fetch_object(object);
183+
HashTable *std_props = zend_std_get_properties(object);
184+
HashTable *debug_info = zend_array_dup(std_props);
185+
186+
zend_string *string_key;
187+
xmlreader_prop_handler *entry;
188+
ZEND_HASH_MAP_FOREACH_STR_KEY_PTR(&xmlreader_prop_handlers, string_key, entry) {
189+
ZEND_ASSERT(string_key != NULL);
190+
191+
zval value;
192+
if (xmlreader_property_reader(obj, entry, &value) == SUCCESS) {
193+
zend_hash_update(debug_info, string_key, &value);
194+
}
195+
} ZEND_HASH_FOREACH_END();
196+
197+
return debug_info;
198+
}
199+
178200
/* {{{ _xmlreader_get_valid_file_path */
179201
/* _xmlreader_get_valid_file_path and _xmlreader_get_relaxNG should be made a
180202
common function in libxml extension as code is common to a few xml extensions */
@@ -1272,6 +1294,7 @@ PHP_MINIT_FUNCTION(xmlreader)
12721294
xmlreader_object_handlers.get_property_ptr_ptr = xmlreader_get_property_ptr_ptr;
12731295
xmlreader_object_handlers.get_method = xmlreader_get_method;
12741296
xmlreader_object_handlers.clone_obj = NULL;
1297+
xmlreader_object_handlers.get_debug_info = xmlreader_get_debug_info;
12751298

12761299
xmlreader_class_entry = register_class_XMLReader();
12771300
xmlreader_class_entry->create_object = xmlreader_objects_new;

‎ext/xmlreader/tests/fromStream_custom_constructor.phpt‎

Lines changed: 22 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -18,45 +18,48 @@ fwrite($h, "<root/>");
1818
fseek($h, 0);
1919

2020
$reader = CustomXMLReader::fromStream($h, encoding: "UTF-8");
21-
var_dump($reader);
21+
try {
22+
var_dump($reader);
23+
} catch (Error $e) {
24+
echo $e->getMessage(), "\n";
25+
}
2226
var_dump($reader->read());
2327
var_dump($reader->nodeType);
2428

2529
fclose($h);
2630
?>
2731
--EXPECTF--
2832
hello world
29-
object(CustomXMLReader)#%d (1) {
33+
object(CustomXMLReader)#%d (14) {
34+
["myField"]=>
35+
int(1234)
3036
["attributeCount"]=>
31-
uninitialized(int)
37+
int(0)
3238
["baseURI"]=>
33-
uninitialized(string)
39+
string(0) ""
3440
["depth"]=>
35-
uninitialized(int)
41+
int(0)
3642
["hasAttributes"]=>
37-
uninitialized(bool)
43+
bool(false)
3844
["hasValue"]=>
39-
uninitialized(bool)
45+
bool(false)
4046
["isDefault"]=>
41-
uninitialized(bool)
42-
["isEmptyElement"]=>
43-
uninitialized(bool)
47+
bool(false)
4448
["localName"]=>
45-
uninitialized(string)
49+
string(0) ""
4650
["name"]=>
47-
uninitialized(string)
51+
string(0) ""
4852
["namespaceURI"]=>
49-
uninitialized(string)
53+
string(0) ""
5054
["nodeType"]=>
51-
uninitialized(int)
55+
int(0)
5256
["prefix"]=>
53-
uninitialized(string)
57+
string(0) ""
5458
["value"]=>
55-
uninitialized(string)
59+
string(0) ""
5660
["xmlLang"]=>
57-
uninitialized(string)
58-
["myField"]=>
59-
int(1234)
61+
string(0) ""
6062
}
63+
Failed to read property because no XML data has been read yet
6164
bool(true)
6265
int(1)

‎ext/xmlreader/tests/fromString_custom_constructor.phpt‎

Lines changed: 22 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -14,43 +14,46 @@ class CustomXMLReader extends XMLReader {
1414
}
1515

1616
$reader = CustomXMLReader::fromString("<root/>");
17-
var_dump($reader);
17+
try {
18+
var_dump($reader);
19+
} catch (Error $e) {
20+
echo $e->getMessage(), "\n";
21+
}
1822
var_dump($reader->read());
1923
var_dump($reader->nodeType);
2024
?>
2125
--EXPECTF--
2226
hello world
23-
object(CustomXMLReader)#%d (1) {
27+
object(CustomXMLReader)#%d (14) {
28+
["myField"]=>
29+
int(1234)
2430
["attributeCount"]=>
25-
uninitialized(int)
31+
int(0)
2632
["baseURI"]=>
27-
uninitialized(string)
33+
string(0) ""
2834
["depth"]=>
29-
uninitialized(int)
35+
int(0)
3036
["hasAttributes"]=>
31-
uninitialized(bool)
37+
bool(false)
3238
["hasValue"]=>
33-
uninitialized(bool)
39+
bool(false)
3440
["isDefault"]=>
35-
uninitialized(bool)
36-
["isEmptyElement"]=>
37-
uninitialized(bool)
41+
bool(false)
3842
["localName"]=>
39-
uninitialized(string)
43+
string(0) ""
4044
["name"]=>
41-
uninitialized(string)
45+
string(0) ""
4246
["namespaceURI"]=>
43-
uninitialized(string)
47+
string(0) ""
4448
["nodeType"]=>
45-
uninitialized(int)
49+
int(0)
4650
["prefix"]=>
47-
uninitialized(string)
51+
string(0) ""
4852
["value"]=>
49-
uninitialized(string)
53+
string(0) ""
5054
["xmlLang"]=>
51-
uninitialized(string)
52-
["myField"]=>
53-
int(1234)
55+
string(0) ""
5456
}
57+
Failed to read property because no XML data has been read yet
5558
bool(true)
5659
int(1)

‎ext/xmlreader/tests/var_dump.phpt‎

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
--TEST--
2+
XMLReader - var_dump
3+
--EXTENSIONS--
4+
xmlreader
5+
--FILE--
6+
<?php
7+
$reader = XMLReader::fromString("<root>hi</root>");
8+
var_dump($reader->read());
9+
var_dump($reader);
10+
?>
11+
--EXPECTF--
12+
bool(true)
13+
object(XMLReader)#%d (14) {
14+
["attributeCount"]=>
15+
int(0)
16+
["baseURI"]=>
17+
string(%d) "%s"
18+
["depth"]=>
19+
int(0)
20+
["hasAttributes"]=>
21+
bool(false)
22+
["hasValue"]=>
23+
bool(false)
24+
["isDefault"]=>
25+
bool(false)
26+
["isEmptyElement"]=>
27+
bool(false)
28+
["localName"]=>
29+
string(4) "root"
30+
["name"]=>
31+
string(4) "root"
32+
["namespaceURI"]=>
33+
string(0) ""
34+
["nodeType"]=>
35+
int(1)
36+
["prefix"]=>
37+
string(0) ""
38+
["value"]=>
39+
string(0) ""
40+
["xmlLang"]=>
41+
string(0) ""
42+
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /