Skip to content

Commit 053d72e

Browse files
committed
Merge branch 'PHP-8.4' into PHP-8.5
* PHP-8.4: phar: Reduce code duplication wrt error handling in phar_parse_zipfile()
2 parents bdf1bcc + b3dd837 commit 053d72e

File tree

1 file changed

+4
-27
lines changed

1 file changed

+4
-27
lines changed

ext/phar/zip.c

Lines changed: 4 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -345,28 +345,6 @@ int phar_parse_zipfile(php_stream *fp, char *fname, size_t fname_len, char *alia
345345
entry.is_zip = 1;
346346
entry.fp_type = PHAR_FP;
347347
entry.is_persistent = mydata->is_persistent;
348-
#define PHAR_ZIP_FAIL_FREE(errmsg, save) \
349-
zend_hash_destroy(&mydata->manifest); \
350-
HT_INVALIDATE(&mydata->manifest); \
351-
zend_hash_destroy(&mydata->mounted_dirs); \
352-
HT_INVALIDATE(&mydata->mounted_dirs); \
353-
zend_hash_destroy(&mydata->virtual_dirs); \
354-
HT_INVALIDATE(&mydata->virtual_dirs); \
355-
php_stream_close(fp); \
356-
phar_metadata_tracker_free(&mydata->metadata_tracker, mydata->is_persistent); \
357-
if (mydata->signature) { \
358-
efree(mydata->signature); \
359-
} \
360-
if (error) { \
361-
spprintf(error, 4096, "phar error: %s in zip-based phar \"%s\"", errmsg, mydata->fname); \
362-
} \
363-
pefree(mydata->fname, mydata->is_persistent); \
364-
if (mydata->alias) { \
365-
pefree(mydata->alias, mydata->is_persistent); \
366-
} \
367-
pefree(mydata, mydata->is_persistent); \
368-
efree(save); \
369-
return FAILURE;
370348
#define PHAR_ZIP_FAIL(errmsg) \
371349
zend_hash_destroy(&mydata->manifest); \
372350
HT_INVALIDATE(&mydata->manifest); \
@@ -522,14 +500,13 @@ int phar_parse_zipfile(php_stream *fp, char *fname, size_t fname_len, char *alia
522500
mydata->sig_flags = PHAR_GET_32(sig);
523501
if (FAILURE == phar_verify_signature(sigfile, php_stream_tell(sigfile), mydata->sig_flags, sig + 8, entry.uncompressed_filesize - 8, fname, &mydata->signature, &sig_len, error)) {
524502
efree(sig);
503+
php_stream_close(sigfile);
525504
if (error) {
526-
char *save;
527-
php_stream_close(sigfile);
528-
spprintf(&save, 4096, "signature cannot be verified: %s", *error);
505+
char errmsg[128];
506+
snprintf(errmsg, sizeof(errmsg), "signature cannot be verified: %s", *error);
529507
efree(*error);
530-
PHAR_ZIP_FAIL_FREE(save, save);
508+
PHAR_ZIP_FAIL(errmsg);
531509
} else {
532-
php_stream_close(sigfile);
533510
PHAR_ZIP_FAIL("signature cannot be verified");
534511
}
535512
}

0 commit comments

Comments
 (0)