[PATCH] disable xml element handler -- with patch
| From: | Dan Torop | Date: | Fri, 10 Dec 2004 07:01:09 +0000 |
| Subject: | [PATCH] disable xml element handler -- with patch | ||
| References: | 1 2 3 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-14038@lists.php.net to get a copy of this message | ||
Apologies for further ignorance, the attachment seems to be dropped by
news server? It is:
--- ext/xml/xml.c.orig 2004-12-09 03:10:00.000000000 -0500
+++ ext/xml/xml.c 2004-12-09 03:28:24.000000000 -0500
@@ -396,6 +396,13 @@
zval_ptr_dtor(handler);
}
+ /* if FALSE or empty string, disable the handler */
+ if (((Z_TYPE_PP(data) == IS_STRING) && (Z_STRLEN_PP(data) == 0)) ||
+ ((Z_TYPE_PP(data) == IS_BOOL) && !Z_BVAL_PP(data))) {
+ *handler = NULL;
+ return;
+ }
+
/* IS_ARRAY might indicate that we're using array($obj, 'method') syntax */
if (Z_TYPE_PP(data) != IS_ARRAY) {
convert_to_string_ex(data);
Original email follows below:
This is a patch to make allow disabling element handlers in the
xml extension.
The documentation for xml_set_default_handler,
xml_set_element_handler, xml_set_external_entity_ref_handler, etc.
states "If a handler function is set to an empty string, or FALSE, the
handler in question is disabled." This doesn't seem to work cleanly
in the current source, instead a warning message is generated.
I'm sadly ignorant about writing proper C for PHP, please forgive my
any grievous errors in the code. Please also forgive me if I am
misunderstanding the documentation and this is a feature which
actually shouldn't be present in PHP.
I forwarded this patch already to Thies Arntzen who is listed is the
extension maintainer, but he says he is not currently working on the
PHP project.
----------
Some sample code to replicate this problem is:
<?
function startElement($parser, $name, $attrs) {
print "start element $name\n";
}
$parser = xml_parser_create();
xml_set_element_handler($parser, 'startElement', FALSE);
xml_parse($parser, "<tag/>", true);
xml_parser_free($parser);
?>
----------
With 5.0.2 and current CVS PHP I see:
start element TAG
Warning: xml_parse(): Unable to call handler () in
/home/dtorop/src/comet/dp/scripts/xmlbug.php on line 8
----------
With the patched code I see:
start element TAG