From: Greg Beaver Date: Mon, 28 Apr 2008 06:03:33 +0000 (+0000) Subject: more fixes for PHAR_G(cwd) X-Git-Tag: RELEASE_2_0_0b1~167 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=fbb2e8ce601b2fcde6e1d9da2060403c16d76b2d;p=php more fixes for PHAR_G(cwd) --- diff --git a/ext/phar/phar.c b/ext/phar/phar.c index 1ca84aa542..525c10ee0b 100644 --- a/ext/phar/phar.c +++ b/ext/phar/phar.c @@ -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; diff --git a/ext/phar/util.c b/ext/phar/util.c index c006fb47a4..fed3b2b6ca 100644 --- a/ext/phar/util.c +++ b/ext/phar/util.c @@ -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);