1
0
mirror of https://gitlab.gnome.org/GNOME/libxml2.git synced 2025-08-05 19:35:54 +03:00

fixed an old bug raised by Bernhard Zwisch, the I/O layer should

* xmlIO.c: fixed an old bug raised by Bernhard Zwisch, the I/O
  layer should URI-Unescape before trying to open resources.
Daniel
This commit is contained in:
Daniel Veillard
2001-07-08 18:35:48 +00:00
parent 0438375d2e
commit 388236fc8b
2 changed files with 34 additions and 7 deletions

View File

@@ -1,3 +1,8 @@
Sun Jul 8 20:34:35 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
* xmlIO.c: fixed an old bug raised by Bernhard Zwisch, the I/O
layer should URI-Unescape before trying to open resources.
Sun Jul 8 16:26:00 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr> Sun Jul 8 16:26:00 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
* xpath.c: fix the name() bug for elements in the default * xpath.c: fix the name() bug for elements in the default

24
xmlIO.c
View File

@@ -62,6 +62,7 @@
#include <libxml/parser.h> #include <libxml/parser.h>
#include <libxml/parserInternals.h> #include <libxml/parserInternals.h>
#include <libxml/xmlIO.h> #include <libxml/xmlIO.h>
#include <libxml/uri.h>
#include <libxml/nanohttp.h> #include <libxml/nanohttp.h>
#include <libxml/nanoftp.h> #include <libxml/nanoftp.h>
#include <libxml/xmlerror.h> #include <libxml/xmlerror.h>
@@ -883,8 +884,9 @@ xmlParserInputBufferCreateFilename
#endif #endif
(const char *URI, xmlCharEncoding enc) { (const char *URI, xmlCharEncoding enc) {
xmlParserInputBufferPtr ret; xmlParserInputBufferPtr ret;
int i; int i = 0;
void *context = NULL; void *context = NULL;
char *unescaped;
if (xmlInputCallbackInitialized == 0) if (xmlInputCallbackInitialized == 0)
xmlRegisterDefaultInputCallbacks(); xmlRegisterDefaultInputCallbacks();
@@ -894,7 +896,26 @@ xmlParserInputBufferCreateFilename
/* /*
* Try to find one of the input accept method accepting taht scheme * Try to find one of the input accept method accepting taht scheme
* Go in reverse to give precedence to user defined handlers. * Go in reverse to give precedence to user defined handlers.
* try with an unescaped version of the URI
*/ */
unescaped = xmlURIUnescapeString(URI, 0, NULL);
if (unescaped != NULL) {
for (i = xmlInputCallbackNr - 1;i >= 0;i--) {
if ((xmlInputCallbackTable[i].matchcallback != NULL) &&
(xmlInputCallbackTable[i].matchcallback(unescaped) != 0)) {
context = xmlInputCallbackTable[i].opencallback(unescaped);
if (context != NULL)
break;
}
}
xmlFree(unescaped);
}
/*
* If this failed try with a non-escaped URI this may be a strange
* filename
*/
if (context == NULL) {
for (i = xmlInputCallbackNr - 1;i >= 0;i--) { for (i = xmlInputCallbackNr - 1;i >= 0;i--) {
if ((xmlInputCallbackTable[i].matchcallback != NULL) && if ((xmlInputCallbackTable[i].matchcallback != NULL) &&
(xmlInputCallbackTable[i].matchcallback(URI) != 0)) { (xmlInputCallbackTable[i].matchcallback(URI) != 0)) {
@@ -903,6 +924,7 @@ xmlParserInputBufferCreateFilename
break; break;
} }
} }
}
if (context == NULL) { if (context == NULL) {
return(NULL); return(NULL);
} }