]> granicus.if.org Git - php/commitdiff
libxml-2.9.2 compatibility
authorAnatol Belski <ab@php.net>
Sun, 15 Mar 2015 17:38:50 +0000 (18:38 +0100)
committerAnatol Belski <ab@php.net>
Sun, 15 Mar 2015 17:38:50 +0000 (18:38 +0100)
ext/libxml/libxml.c

index 13028256eb4b57b85af06491fd536d1a46baf68e..49e44dbada2ac50062358518fe78858944a739a2 100644 (file)
@@ -306,6 +306,21 @@ static void *php_libxml_streams_IO_open_wrapper(const char *filename, const char
                        (xmlStrncmp(BAD_CAST uri->scheme, BAD_CAST "file", 4) == 0))) {
                resolved_path = xmlURIUnescapeString(filename, 0, NULL);
                isescaped = 1;
+#if LIBXML_VERSION >= 20902 && defined(PHP_WIN32)
+               /* Libxml 2.9.2 prefixes local paths with file:/ instead of file://,
+                       thus the php stream wrapper will fail on a valid case. For this
+                       reason the prefix is rather better cut off. */
+               {
+                       size_t pre_len = sizeof("file:/") - 1;
+
+                       if (strncasecmp(resolved_path, "file:/", pre_len) == 0
+                               && '/' != resolved_path[pre_len]) {
+                               xmlChar *tmp = xmlStrdup(resolved_path + pre_len);
+                               xmlFree(resolved_path);
+                               resolved_path = tmp;
+                       }
+               }
+#endif
        } else {
                resolved_path = (char *)filename;
        }