Skip to content

Commit c4f502f

Browse files
author
Greg Beaver
committed
COMPLETELY rework filename extension detection. Now the only requirements are:
1 - executable phars must contain '.phar' in the filename 2 - non-executable phars must not contain '.phar' and must have an extension of at least 1 character In addition, phar filenames must exist if opened for read, and the directory containing the phar must exist if opened for creation if opened for creation, the file must not already exist [DOC]
1 parent bd6696c commit c4f502f

File tree

13 files changed

+317
-141
lines changed

13 files changed

+317
-141
lines changed

ext/phar/dirstream.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -411,7 +411,7 @@ int phar_wrapper_mkdir(php_stream_wrapper *wrapper, char *url_from, int mode, in
411411
uint host_len;
412412

413413
/* pre-readonly check, we need to know if this is a data phar */
414-
if (FAILURE == phar_split_fname(url_from, strlen(url_from), &arch, &arch_len, &entry2, &entry_len TSRMLS_CC)) {
414+
if (FAILURE == phar_split_fname(url_from, strlen(url_from), &arch, &arch_len, &entry2, &entry_len, 2, 2 TSRMLS_CC)) {
415415
php_stream_wrapper_log_error(wrapper, options TSRMLS_CC, "phar error: cannot create directory \"%s\", no phar archive specified", url_from);
416416
return FAILURE;
417417
}
@@ -536,8 +536,8 @@ int phar_wrapper_rmdir(php_stream_wrapper *wrapper, char *url, int options, php_
536536
uint host_len;
537537

538538
/* pre-readonly check, we need to know if this is a data phar */
539-
if (FAILURE == phar_split_fname(url, strlen(url), &arch, &arch_len, &entry2, &entry_len TSRMLS_CC)) {
540-
php_stream_wrapper_log_error(wrapper, options TSRMLS_CC, "phar error: cannot remove directory \"%s\", no phar archive specified", url);
539+
if (FAILURE == phar_split_fname(url, strlen(url), &arch, &arch_len, &entry2, &entry_len, 2, 2 TSRMLS_CC)) {
540+
php_stream_wrapper_log_error(wrapper, options TSRMLS_CC, "phar error: cannot remove directory \"%s\", no phar archive specified, or phar archive does not exist", url);
541541
return FAILURE;
542542
}
543543
if (FAILURE == phar_get_archive(&phar, arch, arch_len, NULL, 0, NULL TSRMLS_CC)) {

ext/phar/func_interceptors.c

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ PHAR_FUNC(phar_opendir) /* {{{ */
4545
goto skip_phar;
4646
}
4747
fname_len = strlen(fname);
48-
if (SUCCESS == phar_split_fname(fname, fname_len, &arch, &arch_len, &entry, &entry_len TSRMLS_CC)) {
48+
if (SUCCESS == phar_split_fname(fname, fname_len, &arch, &arch_len, &entry, &entry_len, 2, 0 TSRMLS_CC)) {
4949
php_stream_context *context = NULL;
5050
php_stream *stream;
5151
char *name;
@@ -109,7 +109,7 @@ PHAR_FUNC(phar_file_get_contents) /* {{{ */
109109
goto skip_phar;
110110
}
111111
fname_len = strlen(fname);
112-
if (SUCCESS == phar_split_fname(fname, fname_len, &arch, &arch_len, &entry, &entry_len TSRMLS_CC)) {
112+
if (SUCCESS == phar_split_fname(fname, fname_len, &arch, &arch_len, &entry, &entry_len, 2, 0 TSRMLS_CC)) {
113113
char *name, *old;
114114
phar_archive_data **pphar;
115115

@@ -223,7 +223,7 @@ PHAR_FUNC(phar_readfile) /* {{{ */
223223
goto skip_phar;
224224
}
225225
fname_len = strlen(fname);
226-
if (FAILURE == phar_split_fname(fname, fname_len, &arch, &arch_len, &entry, &entry_len TSRMLS_CC)) {
226+
if (FAILURE == phar_split_fname(fname, fname_len, &arch, &arch_len, &entry, &entry_len, 2, 0 TSRMLS_CC)) {
227227
goto skip_phar;
228228
}
229229

@@ -303,7 +303,7 @@ PHAR_FUNC(phar_fopen) /* {{{ */
303303
goto skip_phar;
304304
}
305305
fname_len = strlen(fname);
306-
if (FAILURE == phar_split_fname(fname, fname_len, &arch, &arch_len, &entry, &entry_len TSRMLS_CC)) {
306+
if (FAILURE == phar_split_fname(fname, fname_len, &arch, &arch_len, &entry, &entry_len, 2, 0 TSRMLS_CC)) {
307307
goto skip_phar;
308308
}
309309

@@ -573,7 +573,7 @@ void phar_file_stat(const char *filename, php_stat_len filename_length, int type
573573
goto skip_phar;
574574
}
575575
fname_len = strlen(fname);
576-
if (SUCCESS == phar_split_fname(fname, fname_len, &arch, &arch_len, &entry, &entry_len TSRMLS_CC)) {
576+
if (SUCCESS == phar_split_fname(fname, fname_len, &arch, &arch_len, &entry, &entry_len, 2, 0 TSRMLS_CC)) {
577577
phar_archive_data **pphar;
578578

579579
efree(entry);
@@ -827,7 +827,7 @@ PHAR_FUNC(phar_is_file) /* {{{ */
827827
goto skip_phar;
828828
}
829829
fname_len = strlen(fname);
830-
if (SUCCESS == phar_split_fname(fname, fname_len, &arch, &arch_len, &entry, &entry_len TSRMLS_CC)) {
830+
if (SUCCESS == phar_split_fname(fname, fname_len, &arch, &arch_len, &entry, &entry_len, 2, 0 TSRMLS_CC)) {
831831
phar_archive_data **pphar;
832832

833833
efree(entry);
@@ -875,7 +875,7 @@ PHAR_FUNC(phar_is_link) /* {{{ */
875875
goto skip_phar;
876876
}
877877
fname_len = strlen(fname);
878-
if (SUCCESS == phar_split_fname(fname, fname_len, &arch, &arch_len, &entry, &entry_len TSRMLS_CC)) {
878+
if (SUCCESS == phar_split_fname(fname, fname_len, &arch, &arch_len, &entry, &entry_len, 2, 0 TSRMLS_CC)) {
879879
phar_archive_data **pphar;
880880

881881
efree(entry);

0 commit comments

Comments
 (0)