summaryrefslogtreecommitdiff
path: root/ext/phar/util.c
diff options
context:
space:
mode:
authorGreg Beaver <cellog@php.net>2008-05-08 00:49:37 +0000
committerGreg Beaver <cellog@php.net>2008-05-08 00:49:37 +0000
commita919e2f858e0d9f1247dca8e87bab5f8ad6ec09a (patch)
tree988c4e5b01b31eb80562ba5b46e2d72f7aeff635 /ext/phar/util.c
parent5576983a3e96d4b409a1192aeec69c7d503718f5 (diff)
downloadphp-git-a919e2f858e0d9f1247dca8e87bab5f8ad6ec09a.tar.gz
fix serious logic error and potential security issue with phar_compiled_file and
phar_find_in_include_path. We were allowing data-based phars to be executed, and actually marking phar-based phar archives without '.phar' in the name as data-based phars, which would allow modifying them even if phar.readonly=0. Add test for this sinister case
Diffstat (limited to 'ext/phar/util.c')
-rw-r--r--ext/phar/util.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/ext/phar/util.c b/ext/phar/util.c
index 9b0dc279a5..f36d9a031c 100644
--- a/ext/phar/util.c
+++ b/ext/phar/util.c
@@ -225,7 +225,7 @@ char *phar_find_in_include_path(char *filename, int filename_len, phar_archive_d
return phar_save_resolve_path(filename, filename_len TSRMLS_CC);
}
fname = zend_get_executed_filename(TSRMLS_C);
- if (SUCCESS != phar_split_fname(fname, strlen(fname), &arch, &arch_len, &entry, &entry_len, 0, 0 TSRMLS_CC)) {
+ if (SUCCESS != phar_split_fname(fname, strlen(fname), &arch, &arch_len, &entry, &entry_len, 1, 0 TSRMLS_CC)) {
return phar_save_resolve_path(filename, filename_len TSRMLS_CC);
}
if (*filename == '.') {
@@ -267,7 +267,7 @@ char *phar_find_in_include_path(char *filename, int filename_len, phar_archive_d
ret_len = strlen(ret);
/* found phar:// */
- if (SUCCESS != phar_split_fname(ret, ret_len, &arch, &arch_len, &entry, &entry_len, 0, 0 TSRMLS_CC)) {
+ if (SUCCESS != phar_split_fname(ret, ret_len, &arch, &arch_len, &entry, &entry_len, 1, 0 TSRMLS_CC)) {
return ret;
}
zend_hash_find(&(PHAR_GLOBALS->phar_fname_map), arch, arch_len, (void **) &pphar);
@@ -293,7 +293,7 @@ char *phar_find_in_include_path(char *filename, int filename_len, phar_archive_d
goto doit;
}
fname = zend_get_executed_filename(TSRMLS_C);
- if (SUCCESS != phar_split_fname(fname, strlen(fname), &arch, &arch_len, &entry, &entry_len, 0, 0 TSRMLS_CC)) {
+ if (SUCCESS != phar_split_fname(fname, strlen(fname), &arch, &arch_len, &entry, &entry_len, 1, 0 TSRMLS_CC)) {
goto doit;
}
@@ -416,7 +416,7 @@ not_stream:
ret_len = strlen(trypath);
/* found phar:// */
- if (SUCCESS != phar_split_fname(trypath, ret_len, &arch, &arch_len, &entry, &entry_len, 0, 0 TSRMLS_CC)) {
+ if (SUCCESS != phar_split_fname(trypath, ret_len, &arch, &arch_len, &entry, &entry_len, 1, 0 TSRMLS_CC)) {
return estrndup(trypath, ret_len);
}
zend_hash_find(&(PHAR_GLOBALS->phar_fname_map), arch, arch_len, (void **) &pphar);