rrichards Thu Aug 25 22:29:34 2005 EDT Modified files: /php-src/ext/libxml libxml.c Log: Fix URI escaping http://cvs.php.net/diff.php/php-src/ext/libxml/libxml.c?r1=1.34&r2=1.35&ty=u Index: php-src/ext/libxml/libxml.c diff -u php-src/ext/libxml/libxml.c:1.34 php-src/ext/libxml/libxml.c:1.35 --- php-src/ext/libxml/libxml.c:1.34 Thu Aug 25 09:53:38 2005 +++ php-src/ext/libxml/libxml.c Thu Aug 25 22:29:32 2005 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: libxml.c,v 1.34 2005/08/25 13:53:38 dmitry Exp $ */ +/* $Id: libxml.c,v 1.35 2005/08/26 02:29:32 rrichards Exp $ */ #define IS_EXT_MODULE @@ -253,14 +253,26 @@ int php_libxml_streams_IO_match_wrapper(const char *filename) { char *resolved_path; - int retval; + int retval, isescaped=0; + xmlURI *uri; TSRMLS_FETCH(); if (zend_is_executing(TSRMLS_C)) { - resolved_path = xmlURIUnescapeString(filename, 0, NULL); + uri = xmlParseURI((xmlChar *)filename); + if (uri && (uri->scheme == NULL || (xmlStrncmp(uri->scheme, "file", 4) == 0))) { + resolved_path = xmlURIUnescapeString(filename, 0, NULL); + isescaped = 1; + } else { + resolved_path = (char *)filename; + } + + if (uri) { + xmlFreeURI(uri); + } + retval = php_stream_locate_url_wrapper(resolved_path, NULL, 0 TSRMLS_CC) ? 1 : 0; - if (resolved_path) { + if (resolved_path && isescaped) { xmlFree(resolved_path); } return retval; @@ -275,9 +287,22 @@ php_stream_wrapper *wrapper = NULL; char *resolved_path, *path_to_open = NULL; void *ret_val = NULL; + int isescaped=0; + xmlURI *uri; TSRMLS_FETCH(); - resolved_path = xmlURIUnescapeString(filename, 0, NULL); + + uri = xmlParseURI((xmlChar *)filename); + if (uri && (uri->scheme == NULL || (xmlStrncmp(uri->scheme, "file", 4) == 0))) { + resolved_path = xmlURIUnescapeString(filename, 0, NULL); + isescaped = 1; + } else { + resolved_path = (char *)filename; + } + + if (uri) { + xmlFreeURI(uri); + } if (resolved_path == NULL) { return NULL; @@ -292,7 +317,9 @@ wrapper = php_stream_locate_url_wrapper(resolved_path, &path_to_open, ENFORCE_SAFE_MODE TSRMLS_CC); if (wrapper && read_only && wrapper->wops->url_stat) { if (wrapper->wops->url_stat(wrapper, path_to_open, PHP_STREAM_URL_STAT_QUIET, &ssbuf, NULL TSRMLS_CC) == -1) { - xmlFree(resolved_path); + if (isescaped) { + xmlFree(resolved_path); + } return NULL; } } @@ -302,7 +329,9 @@ } ret_val = php_stream_open_wrapper_ex(path_to_open, (char *)mode, ENFORCE_SAFE_MODE|REPORT_ERRORS, NULL, context); - xmlFree(resolved_path); + if (isescaped) { + xmlFree(resolved_path); + } return ret_val; }
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php