summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ext/xmlreader/php_xmlreader.c16
-rw-r--r--ext/xmlreader/tests/008.phpt2
2 files changed, 14 insertions, 4 deletions
diff --git a/ext/xmlreader/php_xmlreader.c b/ext/xmlreader/php_xmlreader.c
index e1012ccb0d..0076f5ce74 100644
--- a/ext/xmlreader/php_xmlreader.c
+++ b/ext/xmlreader/php_xmlreader.c
@@ -1094,16 +1094,22 @@ PHP_METHOD(xmlreader, XML)
int source_len = 0, encoding_len = 0;
long options = 0;
xmlreader_object *intern = NULL;
- char *source, *uri = NULL, *encoding = NULL;
+ zstr source;
+ char *uri = NULL, *encoding = NULL;
int resolved_path_len;
char *directory=NULL, resolved_path[MAXPATHLEN];
xmlParserInputBufferPtr inputbfr;
xmlTextReaderPtr reader = NULL;
+ zend_uchar source_type;
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "S|s!l", &source, &source_len, &encoding, &encoding_len, &options) == FAILURE) {
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "t|s!l", &source, &source_len, &source_type, &encoding, &encoding_len, &options) == FAILURE) {
return;
}
+ if (source_type == IS_UNICODE) {
+ source.s = php_libxml_unicode_to_string(source.u, source_len, &source_len TSRMLS_CC);
+ }
+
id = getThis();
if (id != NULL && ! instanceof_function(Z_OBJCE_P(id), xmlreader_class_entry TSRMLS_CC)) {
id = NULL;
@@ -1118,7 +1124,11 @@ PHP_METHOD(xmlreader, XML)
RETURN_FALSE;
}
- inputbfr = xmlParserInputBufferCreateMem(source, source_len, XML_CHAR_ENCODING_NONE);
+ inputbfr = xmlParserInputBufferCreateMem(source.s, source_len, XML_CHAR_ENCODING_NONE);
+
+ if (source_type == IS_UNICODE) {
+ efree(source.s);
+ }
if (inputbfr != NULL) {
/* Get the URI of the current script so that we can set the base directory in libxml */
diff --git a/ext/xmlreader/tests/008.phpt b/ext/xmlreader/tests/008.phpt
index 18c8dba73d..aee3932216 100644
--- a/ext/xmlreader/tests/008.phpt
+++ b/ext/xmlreader/tests/008.phpt
@@ -22,7 +22,7 @@ $xmlstring = '<?xml version="1.0" encoding="UTF-8" standalone="no"?>
</MOVIE>
</LIST>';
-$dtdfile = rawurlencode(dirname(__FILE__)) . b'/dtdexample.dtd';
+$dtdfile = rawurlencode((binary)dirname(__FILE__)) . b'/dtdexample.dtd';
$file = dirname(__FILE__) . '/__008.xml';
file_put_contents($file, $xmlstring);