@ -6110,11 +6110,19 @@ static int ZEND_FASTCALL ZEND_FETCH_DIM_TMP_VAR_SPEC_TMP_CONST_HANDLER(ZEND_OPC
static int ZEND_FASTCALL ZEND_ADD_CHAR_SPEC_TMP_CONST_HANDLER ( ZEND_OPCODE_HANDLER_ARGS )
{
zend_op * opline = EX ( opline ) ;
zend_free_op free_op1 ;
zval * str = & EX_T ( opline - > result . u . var ) . tmp_var ;
if ( IS_TMP_VAR = = IS_UNUSED ) {
/* Initialize for erealloc in add_char_to_string */
Z_UNIVAL_P ( str ) . v = NULL ;
Z_UNILEN_P ( str ) = 0 ;
Z_TYPE_P ( str ) = opline - > extended_value ;
INIT_PZVAL ( str ) ;
}
add_char_to_string ( str , str , & opline - > op2 . u . constant ) ;
add_char_to_string ( & EX_T ( opline - > result . u . var ) . tmp_var ,
_get_zval_ptr_tmp ( & opline - > op1 , EX ( Ts ) , & free_op1 TSRMLS_CC ) ,
& opline - > op2 . u . constant ) ;
/* FREE_OP is missing intentionally here - we're always working on the same temporary variable */
ZEND_VM_NEXT_OPCODE ( ) ;
}
@ -6122,11 +6130,19 @@ static int ZEND_FASTCALL ZEND_ADD_CHAR_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDL
static int ZEND_FASTCALL ZEND_ADD_STRING_SPEC_TMP_CONST_HANDLER ( ZEND_OPCODE_HANDLER_ARGS )
{
zend_op * opline = EX ( opline ) ;
zend_free_op free_op1 ;
zval * str = & EX_T ( opline - > result . u . var ) . tmp_var ;
if ( IS_TMP_VAR = = IS_UNUSED ) {
/* Initialize for erealloc in add_string_to_string */
Z_UNIVAL_P ( str ) . v = NULL ;
Z_UNILEN_P ( str ) = 0 ;
Z_TYPE_P ( str ) = opline - > extended_value ;
INIT_PZVAL ( str ) ;
}
add_string_to_string ( str , str , & opline - > op2 . u . constant ) ;
add_string_to_string ( & EX_T ( opline - > result . u . var ) . tmp_var ,
_get_zval_ptr_tmp ( & opline - > op1 , EX ( Ts ) , & free_op1 TSRMLS_CC ) ,
& opline - > op2 . u . constant ) ;
/* FREE_OP is missing intentionally here - we're always working on the same temporary variable */
ZEND_VM_NEXT_OPCODE ( ) ;
}
@ -6560,11 +6576,21 @@ static int ZEND_FASTCALL ZEND_BOOL_XOR_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER
static int ZEND_FASTCALL ZEND_ADD_VAR_SPEC_TMP_TMP_HANDLER ( ZEND_OPCODE_HANDLER_ARGS )
{
zend_op * opline = EX ( opline ) ;
zend_free_op free_op1 , free_op2 ;
zend_free_op free_op2 ;
zval * str = & EX_T ( opline - > result . u . var ) . tmp_var ;
zval * var = _get_zval_ptr_tmp ( & opline - > op2 , EX ( Ts ) , & free_op2 TSRMLS_CC ) ;
zval var_copy ;
int use_copy = 0 ;
if ( IS_TMP_VAR = = IS_UNUSED ) {
/* Initialize for erealloc in add_string_to_string */
Z_UNIVAL_P ( str ) . v = NULL ;
Z_UNILEN_P ( str ) = 0 ;
Z_TYPE_P ( str ) = opline - > extended_value ;
INIT_PZVAL ( str ) ;
}
if ( Z_TYPE_P ( var ) ! = opline - > extended_value ) {
if ( opline - > extended_value = = IS_UNICODE ) {
zend_make_unicode_zval ( var , & var_copy , & use_copy ) ;
@ -6576,8 +6602,8 @@ static int ZEND_FASTCALL ZEND_ADD_VAR_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_
var = & var_copy ;
}
}
add_string_to_string ( & EX_T ( opline - > result . u . var ) . tmp_var ,
_get_zval_ptr_tmp ( & opline - > op1 , EX ( Ts ) , & free_op1 TSRMLS_CC ) , var ) ;
add_string_to_string ( str , str , var ) ;
if ( use_copy ) {
zval_dtor ( var ) ;
}
@ -7023,11 +7049,21 @@ static int ZEND_FASTCALL ZEND_BOOL_XOR_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER
static int ZEND_FASTCALL ZEND_ADD_VAR_SPEC_TMP_VAR_HANDLER ( ZEND_OPCODE_HANDLER_ARGS )
{
zend_op * opline = EX ( opline ) ;
zend_free_op free_op1 , free_op2 ;
zend_free_op free_op2 ;
zval * str = & EX_T ( opline - > result . u . var ) . tmp_var ;
zval * var = _get_zval_ptr_var ( & opline - > op2 , EX ( Ts ) , & free_op2 TSRMLS_CC ) ;
zval var_copy ;
int use_copy = 0 ;
if ( IS_TMP_VAR = = IS_UNUSED ) {
/* Initialize for erealloc in add_string_to_string */
Z_UNIVAL_P ( str ) . v = NULL ;
Z_UNILEN_P ( str ) = 0 ;
Z_TYPE_P ( str ) = opline - > extended_value ;
INIT_PZVAL ( str ) ;
}
if ( Z_TYPE_P ( var ) ! = opline - > extended_value ) {
if ( opline - > extended_value = = IS_UNICODE ) {
zend_make_unicode_zval ( var , & var_copy , & use_copy ) ;
@ -7039,8 +7075,8 @@ static int ZEND_FASTCALL ZEND_ADD_VAR_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_
var = & var_copy ;
}
}
add_string_to_string ( & EX_T ( opline - > result . u . var ) . tmp_var ,
_get_zval_ptr_tmp ( & opline - > op1 , EX ( Ts ) , & free_op1 TSRMLS_CC ) , var ) ;
add_string_to_string ( str , str , var ) ;
if ( use_copy ) {
zval_dtor ( var ) ;
}
@ -7580,11 +7616,21 @@ static int ZEND_FASTCALL ZEND_BOOL_XOR_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_
static int ZEND_FASTCALL ZEND_ADD_VAR_SPEC_TMP_CV_HANDLER ( ZEND_OPCODE_HANDLER_ARGS )
{
zend_op * opline = EX ( opline ) ;
zend_free_op free_op1 ;
zval * str = & EX_T ( opline - > result . u . var ) . tmp_var ;
zval * var = _get_zval_ptr_cv ( & opline - > op2 , EX ( Ts ) , BP_VAR_R TSRMLS_CC ) ;
zval var_copy ;
int use_copy = 0 ;
if ( IS_TMP_VAR = = IS_UNUSED ) {
/* Initialize for erealloc in add_string_to_string */
Z_UNIVAL_P ( str ) . v = NULL ;
Z_UNILEN_P ( str ) = 0 ;
Z_TYPE_P ( str ) = opline - > extended_value ;
INIT_PZVAL ( str ) ;
}
if ( Z_TYPE_P ( var ) ! = opline - > extended_value ) {
if ( opline - > extended_value = = IS_UNICODE ) {
zend_make_unicode_zval ( var , & var_copy , & use_copy ) ;
@ -7596,8 +7642,8 @@ static int ZEND_FASTCALL ZEND_ADD_VAR_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_A
var = & var_copy ;
}
}
add_string_to_string ( & EX_T ( opline - > result . u . var ) . tmp_var ,
_get_zval_ptr_tmp ( & opline - > op1 , EX ( Ts ) , & free_op1 TSRMLS_CC ) , var ) ;
add_string_to_string ( str , str , var ) ;
if ( use_copy ) {
zval_dtor ( var ) ;
}
@ -18313,6 +18359,46 @@ static int ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_
ZEND_VM_NEXT_OPCODE ( ) ;
}
static int ZEND_FASTCALL ZEND_ADD_CHAR_SPEC_UNUSED_CONST_HANDLER ( ZEND_OPCODE_HANDLER_ARGS )
{
zend_op * opline = EX ( opline ) ;
zval * str = & EX_T ( opline - > result . u . var ) . tmp_var ;
if ( IS_UNUSED = = IS_UNUSED ) {
/* Initialize for erealloc in add_char_to_string */
Z_UNIVAL_P ( str ) . v = NULL ;
Z_UNILEN_P ( str ) = 0 ;
Z_TYPE_P ( str ) = opline - > extended_value ;
INIT_PZVAL ( str ) ;
}
add_char_to_string ( str , str , & opline - > op2 . u . constant ) ;
/* FREE_OP is missing intentionally here - we're always working on the same temporary variable */
ZEND_VM_NEXT_OPCODE ( ) ;
}
static int ZEND_FASTCALL ZEND_ADD_STRING_SPEC_UNUSED_CONST_HANDLER ( ZEND_OPCODE_HANDLER_ARGS )
{
zend_op * opline = EX ( opline ) ;
zval * str = & EX_T ( opline - > result . u . var ) . tmp_var ;
if ( IS_UNUSED = = IS_UNUSED ) {
/* Initialize for erealloc in add_string_to_string */
Z_UNIVAL_P ( str ) . v = NULL ;
Z_UNILEN_P ( str ) = 0 ;
Z_TYPE_P ( str ) = opline - > extended_value ;
INIT_PZVAL ( str ) ;
}
add_string_to_string ( str , str , & opline - > op2 . u . constant ) ;
/* FREE_OP is missing intentionally here - we're always working on the same temporary variable */
ZEND_VM_NEXT_OPCODE ( ) ;
}
static int ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CONST_HANDLER ( ZEND_OPCODE_HANDLER_ARGS )
{
zend_op * opline = EX ( opline ) ;
@ -19469,6 +19555,51 @@ static int ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HA
ZEND_VM_NEXT_OPCODE ( ) ;
}
static int ZEND_FASTCALL ZEND_ADD_VAR_SPEC_UNUSED_TMP_HANDLER ( ZEND_OPCODE_HANDLER_ARGS )
{
zend_op * opline = EX ( opline ) ;
zend_free_op free_op2 ;
zval * str = & EX_T ( opline - > result . u . var ) . tmp_var ;
zval * var = _get_zval_ptr_tmp ( & opline - > op2 , EX ( Ts ) , & free_op2 TSRMLS_CC ) ;
zval var_copy ;
int use_copy = 0 ;
if ( IS_UNUSED = = IS_UNUSED ) {
/* Initialize for erealloc in add_string_to_string */
Z_UNIVAL_P ( str ) . v = NULL ;
Z_UNILEN_P ( str ) = 0 ;
Z_TYPE_P ( str ) = opline - > extended_value ;
INIT_PZVAL ( str ) ;
}
if ( Z_TYPE_P ( var ) ! = opline - > extended_value ) {
if ( opline - > extended_value = = IS_UNICODE ) {
zend_make_unicode_zval ( var , & var_copy , & use_copy ) ;
} else {
zend_make_string_zval ( var , & var_copy , & use_copy ) ;
}
if ( use_copy ) {
var = & var_copy ;
}
}
add_string_to_string ( str , str , var ) ;
if ( use_copy ) {
zval_dtor ( var ) ;
}
/* original comment, possibly problematic:
* FREE_OP is missing intentionally here - we ' re always working on the same temporary variable
* ( Zeev ) : I don ' t think it ' s problematic , we only use variables
* which aren ' t affected by FREE_OP ( Ts , ) ' s anyway , unless they ' re
* string offsets or overloaded objects
*/
zval_dtor ( free_op2 . var ) ;
ZEND_VM_NEXT_OPCODE ( ) ;
}
static int ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMP_HANDLER ( ZEND_OPCODE_HANDLER_ARGS )
{
zend_op * opline = EX ( opline ) ;
@ -20554,6 +20685,51 @@ static int ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HA
ZEND_VM_NEXT_OPCODE ( ) ;
}
static int ZEND_FASTCALL ZEND_ADD_VAR_SPEC_UNUSED_VAR_HANDLER ( ZEND_OPCODE_HANDLER_ARGS )
{
zend_op * opline = EX ( opline ) ;
zend_free_op free_op2 ;
zval * str = & EX_T ( opline - > result . u . var ) . tmp_var ;
zval * var = _get_zval_ptr_var ( & opline - > op2 , EX ( Ts ) , & free_op2 TSRMLS_CC ) ;
zval var_copy ;
int use_copy = 0 ;
if ( IS_UNUSED = = IS_UNUSED ) {
/* Initialize for erealloc in add_string_to_string */
Z_UNIVAL_P ( str ) . v = NULL ;
Z_UNILEN_P ( str ) = 0 ;
Z_TYPE_P ( str ) = opline - > extended_value ;
INIT_PZVAL ( str ) ;
}
if ( Z_TYPE_P ( var ) ! = opline - > extended_value ) {
if ( opline - > extended_value = = IS_UNICODE ) {
zend_make_unicode_zval ( var , & var_copy , & use_copy ) ;
} else {
zend_make_string_zval ( var , & var_copy , & use_copy ) ;
}
if ( use_copy ) {
var = & var_copy ;
}
}
add_string_to_string ( str , str , var ) ;
if ( use_copy ) {
zval_dtor ( var ) ;
}
/* original comment, possibly problematic:
* FREE_OP is missing intentionally here - we ' re always working on the same temporary variable
* ( Zeev ) : I don ' t think it ' s problematic , we only use variables
* which aren ' t affected by FREE_OP ( Ts , ) ' s anyway , unless they ' re
* string offsets or overloaded objects
*/
if ( free_op2 . var ) { zval_ptr_dtor ( & free_op2 . var ) ; } ;
ZEND_VM_NEXT_OPCODE ( ) ;
}
static int ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_UNUSED_VAR_HANDLER ( ZEND_OPCODE_HANDLER_ARGS )
{
zend_op * opline = EX ( opline ) ;
@ -21909,6 +22085,50 @@ static int ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HAN
ZEND_VM_NEXT_OPCODE ( ) ;
}
static int ZEND_FASTCALL ZEND_ADD_VAR_SPEC_UNUSED_CV_HANDLER ( ZEND_OPCODE_HANDLER_ARGS )
{
zend_op * opline = EX ( opline ) ;
zval * str = & EX_T ( opline - > result . u . var ) . tmp_var ;
zval * var = _get_zval_ptr_cv ( & opline - > op2 , EX ( Ts ) , BP_VAR_R TSRMLS_CC ) ;
zval var_copy ;
int use_copy = 0 ;
if ( IS_UNUSED = = IS_UNUSED ) {
/* Initialize for erealloc in add_string_to_string */
Z_UNIVAL_P ( str ) . v = NULL ;
Z_UNILEN_P ( str ) = 0 ;
Z_TYPE_P ( str ) = opline - > extended_value ;
INIT_PZVAL ( str ) ;
}
if ( Z_TYPE_P ( var ) ! = opline - > extended_value ) {
if ( opline - > extended_value = = IS_UNICODE ) {
zend_make_unicode_zval ( var , & var_copy , & use_copy ) ;
} else {
zend_make_string_zval ( var , & var_copy , & use_copy ) ;
}
if ( use_copy ) {
var = & var_copy ;
}
}
add_string_to_string ( str , str , var ) ;
if ( use_copy ) {
zval_dtor ( var ) ;
}
/* original comment, possibly problematic:
* FREE_OP is missing intentionally here - we ' re always working on the same temporary variable
* ( Zeev ) : I don ' t think it ' s problematic , we only use variables
* which aren ' t affected by FREE_OP ( Ts , ) ' s anyway , unless they ' re
* string offsets or overloaded objects
*/
ZEND_VM_NEXT_OPCODE ( ) ;
}
static int ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CV_HANDLER ( ZEND_OPCODE_HANDLER_ARGS )
{
zend_op * opline = EX ( opline ) ;
@ -32575,7 +32795,7 @@ void zend_init_opcodes_handlers(void)
ZEND_NULL_HANDLER ,
ZEND_NULL_HANDLER ,
ZEND_NULL_HANDLER ,
ZEND_NULL _HANDLER ,
ZEND_ADD_CHAR_SPEC_UNUSED_CONST _HANDLER ,
ZEND_NULL_HANDLER ,
ZEND_NULL_HANDLER ,
ZEND_NULL_HANDLER ,
@ -32600,7 +32820,7 @@ void zend_init_opcodes_handlers(void)
ZEND_NULL_HANDLER ,
ZEND_NULL_HANDLER ,
ZEND_NULL_HANDLER ,
ZEND_NULL _HANDLER ,
ZEND_ADD_STRING_SPEC_UNUSED_CONST _HANDLER ,
ZEND_NULL_HANDLER ,
ZEND_NULL_HANDLER ,
ZEND_NULL_HANDLER ,
@ -32626,10 +32846,10 @@ void zend_init_opcodes_handlers(void)
ZEND_NULL_HANDLER ,
ZEND_NULL_HANDLER ,
ZEND_NULL_HANDLER ,
ZEND_ADD_VAR_SPEC_UNUSED_TMP_HANDLER ,
ZEND_ADD_VAR_SPEC_UNUSED_VAR_HANDLER ,
ZEND_NULL_HANDLER ,
ZEND_NULL_HANDLER ,
ZEND_NULL_HANDLER ,
ZEND_NULL_HANDLER ,
ZEND_ADD_VAR_SPEC_UNUSED_CV_HANDLER ,
ZEND_NULL_HANDLER ,
ZEND_NULL_HANDLER ,
ZEND_NULL_HANDLER ,