From 245c840ba5fa8bbcc73465cb72aa356d75d63e66 Mon Sep 17 00:00:00 2001 From: Niels Dossche <7771979+nielsdos@users.noreply.github.com> Date: Sat, 11 Oct 2025 13:58:13 +0200 Subject: [PATCH] phar: Reduce code duplication in destructor We can make a variant of the macro to control the throwing behaviour. --- ext/phar/phar_object.c | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/ext/phar/phar_object.c b/ext/phar/phar_object.c index c30145d9fb940..4b78890b6492a 100644 --- a/ext/phar/phar_object.c +++ b/ext/phar/phar_object.c @@ -4518,28 +4518,27 @@ PHP_METHOD(PharFileInfo, __construct) } /* }}} */ -#define PHAR_ENTRY_OBJECT() \ +#define PHAR_ENTRY_OBJECT_EX(throw) \ zval *zobj = ZEND_THIS; \ phar_entry_object *entry_obj = (phar_entry_object*)((char*)Z_OBJ_P(zobj) - Z_OBJ_P(zobj)->handlers->offset); \ if (!entry_obj->entry) { \ - zend_throw_exception_ex(spl_ce_BadMethodCallException, 0, \ - "Cannot call method on an uninitialized PharFileInfo object"); \ - RETURN_THROWS(); \ + if (throw) { \ + zend_throw_exception_ex(spl_ce_BadMethodCallException, 0, \ + "Cannot call method on an uninitialized PharFileInfo object"); \ + } \ + return; \ } +#define PHAR_ENTRY_OBJECT() PHAR_ENTRY_OBJECT_EX(true) + /* {{{ clean up directory-based entry objects */ PHP_METHOD(PharFileInfo, __destruct) { - zval *zobj = ZEND_THIS; - phar_entry_object *entry_obj = (phar_entry_object*)((char*)Z_OBJ_P(zobj) - Z_OBJ_P(zobj)->handlers->offset); - if (zend_parse_parameters_none() == FAILURE) { RETURN_THROWS(); } - if (!entry_obj->entry) { - return; - } + PHAR_ENTRY_OBJECT_EX(false); if (entry_obj->entry->is_temp_dir) { if (entry_obj->entry->filename) {