@@ -34,6 +34,17 @@ static zend_class_entry *phar_ce_data;
3434static zend_class_entry * phar_ce_PharException ;
3535static zend_class_entry * phar_ce_entry ;
3636
37+ #define PHAR_FETCH_INTERNAL_EX (zv ) (void *)((char *) Z_OBJ_P(zv) - Z_OBJ_P(zv)->handlers->offset);
38+ #define PHAR_FETCH_INTERNAL () PHAR_FETCH_INTERNAL_EX(ZEND_THIS)
39+
40+ #define PHAR_ARCHIVE_OBJECT () \
41+ phar_archive_object *phar_obj = PHAR_FETCH_INTERNAL(); \
42+ if (!phar_obj->archive) { \
43+ zend_throw_exception_ex(spl_ce_BadMethodCallException, 0, \
44+ "Cannot call method on an uninitialized Phar object"); \
45+ RETURN_THROWS(); \
46+ }
47+
3748static int phar_file_type (HashTable * mimes , char * file , char * * mime_type ) /* {{{ */
3849{
3950 char * ext ;
@@ -1119,11 +1130,11 @@ PHP_METHOD(Phar, __construct)
11191130 zend_long format = 0 ;
11201131 phar_archive_object * phar_obj ;
11211132 phar_archive_data * phar_data ;
1122- zval * zobj = ZEND_THIS , arg1 , arg2 ;
1133+ zval arg1 , arg2 ;
11231134
1124- phar_obj = ( phar_archive_object * )(( char * ) Z_OBJ_P ( zobj ) - Z_OBJ_P ( zobj ) -> handlers -> offset );
1135+ phar_obj = PHAR_FETCH_INTERNAL ( );
11251136
1126- is_data = instanceof_function (Z_OBJCE_P (zobj ), phar_ce_data );
1137+ is_data = instanceof_function (Z_OBJCE_P (ZEND_THIS ), phar_ce_data );
11271138
11281139 if (is_data ) {
11291140 if (zend_parse_parameters (ZEND_NUM_ARGS (), "p|ls!l" , & fname , & fname_len , & flags , & alias , & alias_len , & format ) == FAILURE ) {
@@ -1223,7 +1234,7 @@ PHP_METHOD(Phar, __construct)
12231234 ZVAL_LONG (& arg2 , flags );
12241235
12251236 zend_call_known_instance_method_with_2_params (spl_ce_RecursiveDirectoryIterator -> constructor ,
1226- Z_OBJ_P (zobj ), NULL , & arg1 , & arg2 );
1237+ Z_OBJ_P (ZEND_THIS ), NULL , & arg1 , & arg2 );
12271238
12281239 zval_ptr_dtor (& arg1 );
12291240
@@ -1353,20 +1364,10 @@ PHP_METHOD(Phar, unlinkArchive)
13531364}
13541365/* }}} */
13551366
1356- #define PHAR_ARCHIVE_OBJECT () \
1357- zval *zobj = ZEND_THIS; \
1358- phar_archive_object *phar_obj = (phar_archive_object*)((char*)Z_OBJ_P(zobj) - Z_OBJ_P(zobj)->handlers->offset); \
1359- if (!phar_obj->archive) { \
1360- zend_throw_exception_ex(spl_ce_BadMethodCallException, 0, \
1361- "Cannot call method on an uninitialized Phar object"); \
1362- RETURN_THROWS(); \
1363- }
1364-
13651367/* {{{ if persistent, remove from the cache */
13661368PHP_METHOD (Phar , __destruct )
13671369{
1368- zval * zobj = ZEND_THIS ;
1369- phar_archive_object * phar_obj = (phar_archive_object * )((char * )Z_OBJ_P (zobj ) - Z_OBJ_P (zobj )-> handlers -> offset );
1370+ phar_archive_object * phar_obj = PHAR_FETCH_INTERNAL ();
13701371
13711372 if (zend_parse_parameters_none () == FAILURE ) {
13721373 RETURN_THROWS ();
@@ -1458,7 +1459,7 @@ static int phar_build(zend_object_iterator *iter, void *puser) /* {{{ */
14581459 case IS_OBJECT :
14591460 if (instanceof_function (Z_OBJCE_P (value ), spl_ce_SplFileInfo )) {
14601461 char * test = NULL ;
1461- spl_filesystem_object * intern = ( spl_filesystem_object * )(( char * ) Z_OBJ_P ( value ) - Z_OBJ_P ( value ) -> handlers -> offset );
1462+ spl_filesystem_object * intern = PHAR_FETCH_INTERNAL_EX ( value );
14621463
14631464 if (!base_len ) {
14641465 zend_throw_exception_ex (spl_ce_BadMethodCallException , 0 , "Iterator %s returns an SplFileInfo object, so base directory must be specified" , ZSTR_VAL (ce -> name ));
@@ -4460,13 +4461,13 @@ PHP_METHOD(PharFileInfo, __construct)
44604461 phar_entry_object * entry_obj ;
44614462 phar_entry_info * entry_info ;
44624463 phar_archive_data * phar_data ;
4463- zval * zobj = ZEND_THIS , arg1 ;
4464+ zval arg1 ;
44644465
44654466 if (zend_parse_parameters (ZEND_NUM_ARGS (), "p" , & fname , & fname_len ) == FAILURE ) {
44664467 RETURN_THROWS ();
44674468 }
44684469
4469- entry_obj = ( phar_entry_object * )(( char * ) Z_OBJ_P ( zobj ) - Z_OBJ_P ( zobj ) -> handlers -> offset );
4470+ entry_obj = PHAR_FETCH_INTERNAL ( );
44704471
44714472 if (entry_obj -> entry ) {
44724473 zend_throw_exception_ex (spl_ce_BadMethodCallException , 0 , "Cannot call constructor twice" );
@@ -4512,15 +4513,14 @@ PHP_METHOD(PharFileInfo, __construct)
45124513 ZVAL_STRINGL (& arg1 , fname , fname_len );
45134514
45144515 zend_call_known_instance_method_with_1_params (spl_ce_SplFileInfo -> constructor ,
4515- Z_OBJ_P (zobj ), NULL , & arg1 );
4516+ Z_OBJ_P (ZEND_THIS ), NULL , & arg1 );
45164517
45174518 zval_ptr_dtor (& arg1 );
45184519}
45194520/* }}} */
45204521
45214522#define PHAR_ENTRY_OBJECT_EX (throw ) \
4522- zval *zobj = ZEND_THIS; \
4523- phar_entry_object *entry_obj = (phar_entry_object*)((char*)Z_OBJ_P(zobj) - Z_OBJ_P(zobj)->handlers->offset); \
4523+ phar_entry_object *entry_obj = PHAR_FETCH_INTERNAL(); \
45244524 if (!entry_obj->entry) { \
45254525 if (throw) { \
45264526 zend_throw_exception_ex(spl_ce_BadMethodCallException, 0, \
0 commit comments