return;
}
- if (!IS_ABSOLUTE_PATH(filename, filename_len)) {
+ if (!IS_ABSOLUTE_PATH(filename, filename_len) && !strstr(filename, "://")) {
char *arch, *entry, *fname;
int arch_len, entry_len, fname_len;
fname = zend_get_executed_filename(TSRMLS_C);
if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, "s|br!ll", &filename, &filename_len, &use_include_path, &zcontext, &offset, &maxlen) == FAILURE) {
return;
}
- if (use_include_path || !IS_ABSOLUTE_PATH(filename, filename_len)) {
+ if (use_include_path || (!IS_ABSOLUTE_PATH(filename, filename_len) && !strstr(filename, "://"))) {
char *arch, *entry, *fname;
int arch_len, entry_len, fname_len;
php_stream_context *context = NULL;
+
fname = zend_get_executed_filename(TSRMLS_C);
if (strncasecmp(fname, "phar://", 7)) {
entry = filename;
/* fopen within phar, if :// is not in the url, then prepend phar://<archive>/ */
entry_len = filename_len;
- if (strstr(entry, "://")) {
- efree(arch);
- efree(old);
- goto skip_phar;
- }
if (ZEND_NUM_ARGS() == 5 && maxlen < 0) {
efree(arch);
RETURN_FALSE;
}
- if (!IS_ABSOLUTE_PATH(filename, filename_len)) {
- /* retrieving a file defaults to within the current directory, so use this if possible */
- if (SUCCESS == (zend_hash_find(&(PHAR_GLOBALS->phar_fname_map), arch, arch_len, (void **) &pphar))) {
- if (use_include_path) {
- if (!(entry = phar_find_in_include_path(entry, entry_len, NULL TSRMLS_CC))) {
- /* this file is not in the phar, use the original path */
- efree(arch);
- efree(old);
- goto skip_phar;
- }
- } else {
- entry = phar_fix_filepath(entry, &entry_len, 1 TSRMLS_CC);
- if (!zend_hash_exists(&((*pphar)->manifest), entry, entry_len)) {
- /* this file is not in the phar, use the original path */
- efree(arch);
- efree(old);
- efree(entry);
- goto skip_phar;
- }
- }
- }
+ /* retrieving a file defaults to within the current directory, so use this if possible */
+ if (FAILURE == (zend_hash_find(&(PHAR_GLOBALS->phar_fname_map), arch, arch_len, (void **) &pphar))) {
+ efree(arch);
+ efree(old);
+ goto skip_phar;
}
- /* auto-convert to phar:// */
- spprintf(&name, 4096, "phar://%s/%s", arch, entry);
- if (entry != filename) {
- efree(entry);
+ if (use_include_path) {
+ if ((entry = phar_find_in_include_path(entry, entry_len, NULL TSRMLS_CC))) {
+ name = entry;
+ } else {
+ /* this file is not in the phar, use the original path */
+ efree(arch);
+ efree(old);
+ goto skip_phar;
+ }
+ } else {
+ entry = phar_fix_filepath(estrndup(entry, entry_len), &entry_len, 1 TSRMLS_CC);
+ if (!zend_hash_exists(&((*pphar)->manifest), entry + 1, entry_len - 1)) {
+ /* this file is not in the phar, use the original path */
+ efree(arch);
+ efree(old);
+ efree(entry);
+ goto skip_phar;
+ }
+ /* auto-convert to phar:// */
+ spprintf(&name, 4096, "phar://%s%s", arch, entry);
+ if (entry != filename) {
+ efree(entry);
+ }
}
+
efree(arch);
+ efree(old);
if (zcontext) {
context = php_stream_context_from_zval(zcontext, 0);
}
stream = php_stream_open_wrapper_ex(name, "rb", 0 | REPORT_ERRORS, NULL, context);
efree(name);
-
if (!stream) {
RETURN_FALSE;
}
if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, "ss|br", &filename, &filename_len, &mode, &mode_len, &use_include_path, &zcontext) == FAILURE) {
goto skip_phar;
}
- if (use_include_path || !IS_ABSOLUTE_PATH(filename, filename_len)) {
+ if (!use_include_path && !IS_ABSOLUTE_PATH(filename, filename_len) && !strstr(filename, "://")) {
char *arch, *entry, *fname;
int arch_len, entry_len, fname_len;
php_stream_context *context = NULL;
RETURN_FALSE;
}
- if (!IS_ABSOLUTE_PATH(filename, filename_length)) {
+ if (!IS_ABSOLUTE_PATH(filename, filename_length) && !strstr(filename, "://")) {
char *arch, *entry, *fname;
int arch_len, entry_len, fname_len;
struct stat sb = {0};
if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, "s", &filename, &filename_len) == FAILURE) {
goto skip_phar;
}
- if (!IS_ABSOLUTE_PATH(filename, filename_len)) {
+ if (!IS_ABSOLUTE_PATH(filename, filename_len) && !strstr(filename, "://")) {
char *arch, *entry, *fname;
int arch_len, entry_len, fname_len, free_filename = 0;
fname = zend_get_executed_filename(TSRMLS_C);
if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, "s", &filename, &filename_len) == FAILURE) {
goto skip_phar;
}
- if (!IS_ABSOLUTE_PATH(filename, filename_len)) {
+ if (!IS_ABSOLUTE_PATH(filename, filename_len) && !strstr(filename, "://")) {
char *arch, *entry, *fname;
int arch_len, entry_len, fname_len, free_filename = 0;
fname = zend_get_executed_filename(TSRMLS_C);