cvs: php-src /ext/xmlreader php_xmlreader.c
| From: | Rob Richards | Date: | Fri, 21 Jul 2006 00:57:14 +0000 |
| Subject: | cvs: php-src /ext/xmlreader php_xmlreader.c | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-39419@lists.php.net to get a copy of this message | ||
rrichards Fri Jul 21 00:57:14 2006 UTC
Modified files:
/php-src/ext/xmlreader php_xmlreader.c
Log:
unicode support for handling filenames
http://cvs.php.net/viewvc.cgi/php-src/ext/xmlreader/php_xmlreader.c?r1=1.34&r2=1.35&diff_format=u
Index: php-src/ext/xmlreader/php_xmlreader.c
diff -u php-src/ext/xmlreader/php_xmlreader.c:1.34 php-src/ext/xmlreader/php_xmlreader.c:1.35
--- php-src/ext/xmlreader/php_xmlreader.c:1.34 Wed Jul 19 18:32:19 2006
+++ php-src/ext/xmlreader/php_xmlreader.c Fri Jul 21 00:57:14 2006
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_xmlreader.c,v 1.34 2006/07/19 18:32:19 rrichards Exp $ */
+/* $Id: php_xmlreader.c,v 1.35 2006/07/21 00:57:14 rrichards Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -505,9 +505,16 @@
xmlreader_object *intern;
xmlRelaxNGPtr schema = NULL;
char *source;
+ zend_uchar source_type = IS_STRING;
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s!", &source, &source_len)
== FAILURE) {
- return;
+ if (type == XMLREADER_LOAD_FILE) {
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "t!", &source,
&source_len, &source_type) == FAILURE) {
+ return;
+ }
+ } else {
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s!", &source,
&source_len) == FAILURE) {
+ return;
+ }
}
if (source != NULL && !source_len) {
@@ -520,10 +527,18 @@
intern = (xmlreader_object *)zend_object_store_get_object(id TSRMLS_CC);
if (intern && intern->ptr) {
if (source) {
+ if (source_type == IS_UNICODE) {
+ if (php_stream_path_encode(NULL, &source, &source_len, (UChar*)source, source_len,
REPORT_ERRORS, NULL) == FAILURE) {
+ RETURN_FALSE;
+ }
+ }
schema = _xmlreader_get_relaxNG(source, source_len, type, NULL, NULL TSRMLS_CC);
if (schema) {
retval = xmlTextReaderRelaxNGSetSchema(intern->ptr, schema);
}
+ if (source_type == IS_UNICODE) {
+ efree(source);
+ }
} else {
/* unset the associated relaxNG context and schema if one exists */
retval = xmlTextReaderRelaxNGSetSchema(intern->ptr, NULL);
@@ -902,6 +917,7 @@
{
zval *id;
int source_len = 0, encoding_len = 0;
+ zend_uchar source_type;
long options = 0;
xmlreader_object *intern = NULL;
char *source, *valid_file = NULL;
@@ -913,7 +929,7 @@
orig_runtime_conv = ZEND_U_CONVERTER(UG(runtime_encoding_conv));
UG(runtime_encoding_conv) = UG(utf8_conv);
- 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) {
UG(runtime_encoding_conv) = orig_runtime_conv;
return;
}
@@ -935,12 +951,22 @@
RETURN_FALSE;
}
+ if (source_type == IS_UNICODE) {
+ if (php_stream_path_encode(NULL, &source, &source_len, (UChar*)source, source_len,
REPORT_ERRORS, NULL) == FAILURE) {
+ RETURN_FALSE;
+ }
+ }
+
valid_file = _xmlreader_get_valid_file_path(source, resolved_path, MAXPATHLEN TSRMLS_CC);
if (valid_file) {
reader = xmlReaderForFile(valid_file, encoding, options);
}
+ if (source_type == IS_UNICODE) {
+ efree(source);
+ }
+
if (reader == NULL) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to open source data");
RETURN_FALSE;
@@ -1001,8 +1027,9 @@
int source_len = 0, retval = -1;
xmlreader_object *intern;
char *source;
+ zend_uchar source_type;
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s!", &source, &source_len)
== FAILURE) {
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "t!", &source, &source_len,
&source_type) == FAILURE) {
return;
}
@@ -1015,8 +1042,17 @@
intern = (xmlreader_object *)zend_object_store_get_object(id TSRMLS_CC);
if (intern && intern->ptr) {
+ if (source_type == IS_UNICODE) {
+ if (php_stream_path_encode(NULL, &source, &source_len, (UChar*)source, source_len,
REPORT_ERRORS, NULL) == FAILURE) {
+ RETURN_FALSE;
+ }
+ }
retval = xmlTextReaderSchemaValidate(intern->ptr, source);
+ if (source_type == IS_UNICODE) {
+ efree(source);
+ }
+
if (retval == 0) {
RETURN_TRUE;
}