]> granicus.if.org Git - php/commitdiff
Disable path resolution for filenames with stream wrappers
authorDmitry Stogov <dmitry@php.net>
Thu, 13 Mar 2008 14:09:54 +0000 (14:09 +0000)
committerDmitry Stogov <dmitry@php.net>
Thu, 13 Mar 2008 14:09:54 +0000 (14:09 +0000)
More careful check for relative pathes (./xxx and ../xxx)

main/fopen_wrappers.c

index 3fa92b121f17a123c0105f4ac182d4671057df34..d686a303ac0164fa745d11ca29a0ab885388db41 100644 (file)
@@ -446,13 +446,21 @@ PHPAPI char *php_resolve_path(const char *filename, int filename_length, const c
 {
        char resolved_path[MAXPATHLEN];
        char trypath[MAXPATHLEN];
-       char *ptr, *end;
+       const char *ptr, *end, *p;
 
        if (!filename) {
                return NULL;
        }
 
-       if (*filename == '.' ||
+       /* Don't resolve patches which contain protocol */
+       for (p = filename; isalnum((int)*p) || *p == '+' || *p == '-' || *p == '.'; p++);
+    if ((*p == ':') && (p - filename > 1) && (p[1] == '/') && (p[2] == '/')) {
+       return NULL;
+    }
+
+       if ((*filename == '.' && 
+            (IS_SLASH(filename[1]) || 
+             ((filename[1] == '.') && IS_SLASH(filename[2])))) ||
            IS_ABSOLUTE_PATH(filename, filename_length) ||
            !path ||
            !*path) {