@@ -844,7 +844,7 @@ void execute(zend_op_array *op_array ELS_DC)
844
844
zend_function_state function_state ;
845
845
HashTable * calling_symbol_table ;
846
846
zend_function * function_being_called = NULL ;
847
- zval * * object_ptr = NULL ;
847
+ zval * object_ptr = NULL ;
848
848
#if !defined (__GNUC__ ) || __GNUC__ < 2
849
849
temp_variable * Ts = (temp_variable * ) do_alloca (sizeof (temp_variable )* op_array -> T );
850
850
#else
@@ -1270,7 +1270,9 @@ binary_assign_op_addr: {
1270
1270
1271
1271
if (opline -> extended_value & ZEND_CTOR_CALL ) {
1272
1272
/* constructor call */
1273
- PZVAL_LOCK (* Ts [opline -> op1 .u .var ].var );
1273
+ if (opline -> op1 .op_type == IS_VAR ) {
1274
+ PZVAL_LOCK (* Ts [opline -> op1 .u .var ].var );
1275
+ }
1274
1276
if (opline -> op2 .op_type == IS_VAR ) {
1275
1277
PZVAL_LOCK (* Ts [opline -> op2 .u .var ].var );
1276
1278
}
@@ -1295,11 +1297,11 @@ binary_assign_op_addr: {
1295
1297
object_ptr = NULL ;
1296
1298
}
1297
1299
} else { /* used for member function calls */
1298
- object_ptr = get_zval_ptr_ptr (& opline -> op1 , Ts , BP_VAR_R );
1299
-
1300
+ object_ptr = get_zval_ptr (& opline -> op1 , Ts , & free_op1 , BP_VAR_R );
1301
+
1300
1302
1301
1303
if (!object_ptr
1302
- || (( * object_ptr ) -> type == IS_OBJECT && ( * object_ptr ) -> value .obj .ce -> handle_function_call )) { /* overloaded function call */
1304
+ || (object_ptr -> type == IS_OBJECT && object_ptr -> value .obj .ce -> handle_function_call )) { /* overloaded function call */
1303
1305
zend_overloaded_element overloaded_element ;
1304
1306
zend_property_reference * property_reference ;
1305
1307
@@ -1322,10 +1324,10 @@ binary_assign_op_addr: {
1322
1324
goto overloaded_function_call_cont ;
1323
1325
}
1324
1326
1325
- if (( * object_ptr ) -> type != IS_OBJECT ) {
1327
+ if (object_ptr -> type != IS_OBJECT ) {
1326
1328
zend_error (E_ERROR , "Call to a member function on a non-object" );
1327
1329
}
1328
- active_function_table = & ( * object_ptr ) -> value .obj .ce -> function_table ;
1330
+ active_function_table = & object_ptr -> value .obj .ce -> function_table ;
1329
1331
}
1330
1332
} else { /* function pointer */
1331
1333
object_ptr = NULL ;
@@ -1359,7 +1361,7 @@ binary_assign_op_addr: {
1359
1361
zend_ptr_stack_push (& EG (argument_stack ), (void * ) opline -> extended_value );
1360
1362
if (function_state .function -> type == ZEND_INTERNAL_FUNCTION ) {
1361
1363
var_uninit (& Ts [opline -> result .u .var ].tmp_var );
1362
- ((zend_internal_function * ) function_state .function )-> handler (opline -> extended_value , & Ts [opline -> result .u .var ].tmp_var , & EG (regular_list ), & EG (persistent_list ), (object_ptr ?* object_ptr :NULL ));
1364
+ ((zend_internal_function * ) function_state .function )-> handler (opline -> extended_value , & Ts [opline -> result .u .var ].tmp_var , & EG (regular_list ), & EG (persistent_list ), (object_ptr ?object_ptr :NULL ));
1363
1365
} else if (function_state .function -> type == ZEND_USER_FUNCTION ) {
1364
1366
if (EG (symtable_cache_ptr )>=EG (symtable_cache )) {
1365
1367
/*printf("Cache hit! Reusing %x\n", symtable_cache[symtable_cache_ptr]);*/
@@ -1374,12 +1376,13 @@ binary_assign_op_addr: {
1374
1376
if (opline -> opcode == ZEND_DO_FCALL_BY_NAME
1375
1377
&& object_ptr
1376
1378
&& function_being_called -> type != ZEND_OVERLOADED_FUNCTION ) {
1377
- zval * dummy = (zval * ) emalloc (sizeof (zval )), * * this_ptr ;
1379
+ /* zval *dummy = (zval *) emalloc(sizeof(zval)), **this_ptr;
1378
1380
1379
1381
var_uninit(dummy);
1380
1382
INIT_PZVAL(dummy);
1381
1383
zend_hash_update_ptr(function_state.function_symbol_table, "this", sizeof("this"), dummy, sizeof(zval *), (void **) &this_ptr);
1382
1384
zend_assign_to_variable_reference(NULL, this_ptr, object_ptr, NULL ELS_CC);
1385
+ */
1383
1386
object_ptr = NULL ;
1384
1387
}
1385
1388
original_return_value = EG (return_value );
@@ -1850,8 +1853,10 @@ binary_assign_op_addr: {
1850
1853
break ;
1851
1854
case ZEND_JMP_NO_CTOR : {
1852
1855
zval * object ;
1853
-
1854
- PZVAL_LOCK (* Ts [opline -> op1 .u .var ].var );
1856
+
1857
+ if (opline -> op1 .op_type == IS_VAR ) {
1858
+ PZVAL_LOCK (* Ts [opline -> op1 .u .var ].var );
1859
+ }
1855
1860
object = get_zval_ptr (& opline -> op1 , Ts , & free_op1 , BP_VAR_R );
1856
1861
if (!object -> value .obj .ce -> handle_function_call
1857
1862
&& !zend_hash_exists (& object -> value .obj .ce -> function_table , object -> value .obj .ce -> name , object -> value .obj .ce -> name_length + 1 )) {
0 commit comments