]> granicus.if.org Git - php/commitdiff
more fixes for PHAR_G(cwd)
authorGreg Beaver <cellog@php.net>
Mon, 28 Apr 2008 06:03:33 +0000 (06:03 +0000)
committerGreg Beaver <cellog@php.net>
Mon, 28 Apr 2008 06:03:33 +0000 (06:03 +0000)
ext/phar/phar.c
ext/phar/util.c

index 1ca84aa5427eb6b7da3540ead5473d319b2cb1a8..525c10ee0be6fcc18bc39dd1a631ec9432b2a9e0 100644 (file)
@@ -2874,6 +2874,21 @@ static zend_op_array *phar_compile_file(zend_file_handle *file_handle, int type
 #endif
                        }
                }
+       } else if (PHAR_G(cwd_init) && !strstr(file_handle->filename, "://")) {
+               if ((name = phar_find_in_include_path((char *) file_handle->filename, strlen(file_handle->filename), NULL TSRMLS_CC))) {
+                       zend_file_handle f = *file_handle;
+                       if (SUCCESS == phar_orig_zend_open((const char *)name, file_handle TSRMLS_CC)) {
+                               efree(name);
+                               name = NULL;
+                               file_handle->filename = f.filename;
+                               if (f.opened_path) {
+                                       efree(f.opened_path);
+                               }
+                               file_handle->free_filename = 1;
+                       } else {
+                               *file_handle = f;
+                       }
+               }
        }
        zend_try {
                failed = 0;
index c006fb47a44dc4ccb505d9f00da203181c5e0152..fed3b2b6caef9df937657d572ce50956035bec5a 100644 (file)
@@ -236,11 +236,20 @@ char *phar_find_in_include_path(char *filename, int filename_len, phar_archive_d
                efree(entry);
                try_len = filename_len;
                test = phar_fix_filepath(estrndup(filename, filename_len), &try_len, 1 TSRMLS_CC);
-               if (zend_hash_exists(&((*pphar)->manifest), test + 1, try_len - 1)) {
-                       spprintf(&ret, 0, "phar://%s%s", arch, test);
-                       efree(arch);
-                       efree(test);
-                       return ret;
+               if (*test == '/') {
+                       if (zend_hash_exists(&((*pphar)->manifest), test + 1, try_len - 1)) {
+                               spprintf(&ret, 0, "phar://%s%s", arch, test);
+                               efree(arch);
+                               efree(test);
+                               return ret;
+                       }
+               } else {
+                       if (zend_hash_exists(&((*pphar)->manifest), test, try_len)) {
+                               spprintf(&ret, 0, "phar://%s/%s", arch, test);
+                               efree(arch);
+                               efree(test);
+                               return ret;
+                       }
                }
        }
        efree(entry);