@@ -604,8 +604,18 @@ ZEND_API zend_result ZEND_FASTCALL zend_ast_evaluate(zval *result, zend_ast *ast
604
604
break ;
605
605
}
606
606
ZVAL_BOOL (result , zend_is_true (& op2 ));
607
+ /* op2 is an object which cannot be converted to bool */
608
+ if (UNEXPECTED (EG (exception ))) {
609
+ ZVAL_UNDEF (result );
610
+ return FAILURE ;
611
+ }
607
612
zval_ptr_dtor_nogc (& op2 );
608
613
} else {
614
+ /* op1 is an object which cannot be converted to bool */
615
+ if (UNEXPECTED (EG (exception ))) {
616
+ ZVAL_UNDEF (result );
617
+ return FAILURE ;
618
+ }
609
619
ZVAL_FALSE (result );
610
620
}
611
621
zval_ptr_dtor_nogc (& op1 );
@@ -618,12 +628,22 @@ ZEND_API zend_result ZEND_FASTCALL zend_ast_evaluate(zval *result, zend_ast *ast
618
628
if (zend_is_true (& op1 )) {
619
629
ZVAL_TRUE (result );
620
630
} else {
631
+ /* op1 is an object which cannot be converted to bool */
632
+ if (UNEXPECTED (EG (exception ))) {
633
+ ZVAL_UNDEF (result );
634
+ return FAILURE ;
635
+ }
621
636
if (UNEXPECTED (zend_ast_evaluate (& op2 , ast -> child [1 ], scope ) != SUCCESS )) {
622
637
zval_ptr_dtor_nogc (& op1 );
623
638
ret = FAILURE ;
624
639
break ;
625
640
}
626
641
ZVAL_BOOL (result , zend_is_true (& op2 ));
642
+ /* op2 is an object which cannot be converted to bool */
643
+ if (UNEXPECTED (EG (exception ))) {
644
+ ZVAL_UNDEF (result );
645
+ return FAILURE ;
646
+ }
627
647
zval_ptr_dtor_nogc (& op2 );
628
648
}
629
649
zval_ptr_dtor_nogc (& op1 );
@@ -645,6 +665,10 @@ ZEND_API zend_result ZEND_FASTCALL zend_ast_evaluate(zval *result, zend_ast *ast
645
665
zval_ptr_dtor_nogc (& op1 );
646
666
}
647
667
} else {
668
+ /* op1 is an object which cannot be converted to bool */
669
+ if (UNEXPECTED (EG (exception ))) {
670
+ return FAILURE ;
671
+ }
648
672
if (UNEXPECTED (zend_ast_evaluate (result , ast -> child [2 ], scope ) != SUCCESS )) {
649
673
zval_ptr_dtor_nogc (& op1 );
650
674
ret = FAILURE ;
0 commit comments