]> granicus.if.org Git - php/commitdiff
begin win32 fixes for Phar object - still have a problem I can't track down yet,...
authorGreg Beaver <cellog@php.net>
Tue, 13 Nov 2007 05:57:14 +0000 (05:57 +0000)
committerGreg Beaver <cellog@php.net>
Tue, 13 Nov 2007 05:57:14 +0000 (05:57 +0000)
when passing in a full path with drive letter to the Phar object, we were
then passing "phar://C:/path/to/blah.phar" to php_parse_url(), which
thinks it is getting a valid url scheme "phar", host "C" path "/path/to/blah.phar"

we now pass "phar:///C:/path/to/blah.phar" to make it fail, and then properly
parse the url inside phar

ext/phar/phar.c
ext/phar/phar_object.c

index 521bd69bde55d25c7f08335e2710938f7998ccb0..386d11449ba98113a96f56d1112ebd9f7e32e1a3 100644 (file)
@@ -1482,6 +1482,13 @@ int phar_split_fname(char *filename, int filename_len, char **arch, int *arch_le
                filename_len -= 7;
        }
 
+#ifdef PHP_WIN32
+       if (filename_len > 3 && *filename == '/' && *(filename + 2) == ':' && *(filename + 3) == '/') {
+               filename++;
+               filename_len--;
+       }
+#endif
+
        if (phar_detect_phar_fname_ext(filename, 0, &ext_str, &ext_len) == FAILURE) {
                return FAILURE;
        }
index 64b3a77f1cb1aa54e7ae9d4d3365f9d1df46e8e7..684fd128d3ce10cfed5c5238e6a03983d49907f4 100755 (executable)
@@ -244,7 +244,16 @@ PHP_METHOD(Phar, __construct)
        phar_obj->arc.archive = phar_data;
        phar_obj->spl.oth_handler = &phar_spl_foreign_handler;
 
+#ifdef PHP_WIN32
+       /* check for drive filenames like C:/ and prepend / */
+       if (fname_len > 2 && *(fname + 1) == ':' && *(fname + 2) == '/') {
+               fname_len = spprintf(&fname, 0, "phar:///%s", fname);
+       } else {
+               fname_len = spprintf(&fname, 0, "phar://%s", fname);
+       }
+#else
        fname_len = spprintf(&fname, 0, "phar://%s", fname);
+#endif
 
        INIT_PZVAL(&arg1);
        ZVAL_STRINGL(&arg1, fname, fname_len, 0);