Skip to content

Commit 34a9274

Browse files
committed
ext/phar: refactor phar_create_or_parse_filename() to use a zend_string* for fname
1 parent b9be2e2 commit 34a9274

4 files changed

Lines changed: 14 additions & 13 deletions

File tree

ext/phar/phar.c

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1363,32 +1363,32 @@ ZEND_ATTRIBUTE_NONNULL_ARGS(1, 6, 7) zend_result phar_open_or_create_filename(ze
13631363
return phar_open_or_create_tar(fname, alias, alias_len, is_data, options, pphar, error);
13641364
}
13651365

1366-
return phar_create_or_parse_filename(ZSTR_VAL(fname), ZSTR_LEN(fname), alias, alias_len, is_data, options, pphar, error);
1366+
return phar_create_or_parse_filename(fname, alias, alias_len, is_data, options, pphar, error);
13671367
}
13681368
/* }}} */
13691369

13701370
static zend_result phar_open_from_fp(php_stream* fp, char *fname, size_t fname_len, char *alias, size_t alias_len, uint32_t options, phar_archive_data** pphar, char **error);
13711371

1372-
ZEND_ATTRIBUTE_NONNULL_ARGS(1, 7, 8) zend_result phar_create_or_parse_filename(char *fname, size_t fname_len, char *alias, size_t alias_len, bool is_data, uint32_t options, phar_archive_data** pphar, char **error) /* {{{ */
1372+
ZEND_ATTRIBUTE_NONNULL_ARGS(1, 6, 7) zend_result phar_create_or_parse_filename(zend_string *fname, char *alias, size_t alias_len, bool is_data, uint32_t options, phar_archive_data** pphar, char **error) /* {{{ */
13731373
{
13741374
php_stream *fp;
13751375
zend_string *actual = NULL;
1376+
zend_string *save_fname = fname;
13761377
char *p;
13771378

1378-
if (php_check_open_basedir(fname)) {
1379+
if (php_check_open_basedir(ZSTR_VAL(fname))) {
13791380
return FAILURE;
13801381
}
13811382

13821383
/* first open readonly so it won't be created if not present */
1383-
fp = php_stream_open_wrapper(fname, "rb", IGNORE_URL|STREAM_MUST_SEEK|0, &actual);
1384+
fp = php_stream_open_wrapper(ZSTR_VAL(fname), "rb", IGNORE_URL|STREAM_MUST_SEEK|0, &actual);
13841385

13851386
if (actual) {
1386-
fname = ZSTR_VAL(actual);
1387-
fname_len = ZSTR_LEN(actual);
1387+
fname = actual;
13881388
}
13891389

13901390
if (fp) {
1391-
if (phar_open_from_fp(fp, fname, fname_len, alias, alias_len, options, pphar, error) == SUCCESS) {
1391+
if (phar_open_from_fp(fp, ZSTR_VAL(fname), ZSTR_LEN(fname), alias, alias_len, options, pphar, error) == SUCCESS) {
13921392
if ((*pphar)->is_data || !PHAR_G(readonly)) {
13931393
(*pphar)->is_writeable = 1;
13941394
}
@@ -1407,19 +1407,20 @@ ZEND_ATTRIBUTE_NONNULL_ARGS(1, 7, 8) zend_result phar_create_or_parse_filename(c
14071407

14081408
if (actual) {
14091409
zend_string_release_ex(actual, 0);
1410+
fname = save_fname;
14101411
}
14111412

14121413
if (PHAR_G(readonly) && !is_data) {
14131414
if (options & REPORT_ERRORS) {
1414-
spprintf(error, 0, "creating archive \"%s\" disabled by the php.ini setting phar.readonly", fname);
1415+
spprintf(error, 0, "creating archive \"%s\" disabled by the php.ini setting phar.readonly", ZSTR_VAL(fname));
14151416
}
14161417
return FAILURE;
14171418
}
14181419

14191420
/* set up our manifest */
14201421
phar_archive_data *mydata = ecalloc(1, sizeof(phar_archive_data));
14211422
/* TODO: prevent reallocation via a new expand_filepath() API? */
1422-
char *new_fname = expand_filepath(fname, NULL);
1423+
char *new_fname = expand_filepath(ZSTR_VAL(fname), NULL);
14231424
if (new_fname == NULL) {
14241425
efree(mydata);
14251426
return FAILURE;
@@ -1484,7 +1485,7 @@ ZEND_ATTRIBUTE_NONNULL_ARGS(1, 7, 8) zend_result phar_create_or_parse_filename(c
14841485
if (alias_len && alias) {
14851486
if (NULL == zend_hash_str_add_ptr(&(PHAR_G(phar_alias_map)), alias, alias_len, mydata)) {
14861487
if (options & REPORT_ERRORS) {
1487-
spprintf(error, 0, "archive \"%s\" cannot be associated with alias \"%s\", already in use", fname, alias);
1488+
spprintf(error, 0, "archive \"%s\" cannot be associated with alias \"%s\", already in use", ZSTR_VAL(fname), alias);
14881489
}
14891490

14901491
zend_hash_del(&(PHAR_G(phar_fname_map)), mydata->fname);

ext/phar/phar_internal.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -408,7 +408,7 @@ void phar_destroy_phar_data(phar_archive_data *phar);
408408
ZEND_ATTRIBUTE_NONNULL zend_result phar_postprocess_file(phar_entry_data *idata, uint32_t crc32, char **error, int process_zip);
409409
zend_result phar_open_from_filename(char *fname, size_t fname_len, char *alias, size_t alias_len, uint32_t options, phar_archive_data** pphar, char **error);
410410
ZEND_ATTRIBUTE_NONNULL_ARGS(1, 6, 7) zend_result phar_open_or_create_filename(zend_string *fname, char *alias, size_t alias_len, bool is_data, uint32_t options, phar_archive_data** pphar, char **error);
411-
ZEND_ATTRIBUTE_NONNULL_ARGS(1, 7, 8) zend_result phar_create_or_parse_filename(char *fname, size_t fname_len, char *alias, size_t alias_len, bool is_data, uint32_t options, phar_archive_data** pphar, char **error);
411+
ZEND_ATTRIBUTE_NONNULL_ARGS(1, 6, 7) zend_result phar_create_or_parse_filename(zend_string *fname, char *alias, size_t alias_len, bool is_data, uint32_t options, phar_archive_data** pphar, char **error);
412412
ZEND_ATTRIBUTE_NONNULL_ARGS(3) zend_result phar_open_executed_filename(char *alias, size_t alias_len, char **error);
413413
zend_result phar_free_alias(const phar_archive_data *phar);
414414
zend_result phar_get_archive(phar_archive_data **archive, const char *fname, size_t fname_len, const char *alias, size_t alias_len, char **error);

ext/phar/tar.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ bool phar_is_tar(const char *buf, const char *fname) /* {{{ */
129129
ZEND_ATTRIBUTE_NONNULL_ARGS(1, 6, 7) zend_result phar_open_or_create_tar(zend_string *fname, char *alias, size_t alias_len, bool is_data, uint32_t options, phar_archive_data** pphar, char **error) /* {{{ */
130130
{
131131
phar_archive_data *phar;
132-
zend_result ret = phar_create_or_parse_filename(ZSTR_VAL(fname), ZSTR_LEN(fname), alias, alias_len, is_data, options, &phar, error);
132+
zend_result ret = phar_create_or_parse_filename(fname, alias, alias_len, is_data, options, &phar, error);
133133

134134
if (FAILURE == ret) {
135135
return FAILURE;

ext/phar/zip.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -797,7 +797,7 @@ zend_result phar_parse_zipfile(php_stream *fp, const char *fname, size_t fname_l
797797
ZEND_ATTRIBUTE_NONNULL_ARGS(1, 6, 7) zend_result phar_open_or_create_zip(zend_string *fname, char *alias, size_t alias_len, bool is_data, uint32_t options, phar_archive_data** pphar, char **error) /* {{{ */
798798
{
799799
phar_archive_data *phar;
800-
zend_result ret = phar_create_or_parse_filename(ZSTR_VAL(fname), ZSTR_LEN(fname), alias, alias_len, is_data, options, &phar, error);
800+
zend_result ret = phar_create_or_parse_filename(fname, alias, alias_len, is_data, options, &phar, error);
801801

802802
if (FAILURE == ret) {
803803
return FAILURE;

0 commit comments

Comments
 (0)