@@ -619,6 +619,7 @@ ZEND_API zval *zend_std_read_property(zend_object *zobj, zend_string *name, int
619
619
* guard &= ~IN_ISSET ;
620
620
621
621
if (!zend_is_true (& tmp_result )) {
622
+ /* handles case when tmp_result is an object which cannot be converted to bool */
622
623
retval = & EG (uninitialized_zval );
623
624
OBJ_RELEASE (zobj );
624
625
zval_ptr_dtor (& tmp_result );
@@ -834,6 +835,7 @@ ZEND_API zval *zend_std_read_dimension(zend_object *object, zval *offset, int ty
834
835
return NULL ;
835
836
}
836
837
if (!i_zend_is_true (rv )) {
838
+ /* handles case when tmp_result is an object which cannot be converted to bool */
837
839
OBJ_RELEASE (object );
838
840
zval_ptr_dtor (& tmp_offset );
839
841
zval_ptr_dtor (rv );
@@ -892,12 +894,14 @@ ZEND_API int zend_std_has_dimension(zend_object *object, zval *offset, int check
892
894
ZVAL_COPY_DEREF (& tmp_offset , offset );
893
895
GC_ADDREF (object );
894
896
zend_call_method_with_1_params (object , ce , NULL , "offsetexists" , & retval , & tmp_offset );
897
+ ZEND_ASSERT (Z_TYPE (retval ) != IS_OBJECT );
895
898
result = i_zend_is_true (& retval );
896
899
zval_ptr_dtor (& retval );
897
900
if (check_empty && result && EXPECTED (!EG (exception ))) {
898
901
zend_call_method_with_1_params (object , ce , NULL , "offsetget" , & retval , & tmp_offset );
899
902
result = i_zend_is_true (& retval );
900
903
zval_ptr_dtor (& retval );
904
+ /* TODO: need to do something if retval is an object which cannot be converted to bool? */
901
905
}
902
906
OBJ_RELEASE (object );
903
907
zval_ptr_dtor (& tmp_offset );
@@ -1655,6 +1659,7 @@ ZEND_API int zend_std_has_property(zend_object *zobj, zend_string *name, int has
1655
1659
found :
1656
1660
if (has_set_exists == ZEND_PROPERTY_NOT_EMPTY ) {
1657
1661
result = zend_is_true (value );
1662
+ /* TODO: need to do something if retval is an object which cannot be converted to bool? */
1658
1663
} else if (has_set_exists < ZEND_PROPERTY_NOT_EMPTY ) {
1659
1664
ZEND_ASSERT (has_set_exists == ZEND_PROPERTY_ISSET );
1660
1665
ZVAL_DEREF (value );
@@ -1687,13 +1692,15 @@ ZEND_API int zend_std_has_property(zend_object *zobj, zend_string *name, int has
1687
1692
zend_std_call_issetter (zobj , name , & rv );
1688
1693
result = zend_is_true (& rv );
1689
1694
zval_ptr_dtor (& rv );
1695
+ /* TODO: need to do something if retval is an object which cannot be converted to bool? */
1690
1696
if (has_set_exists == ZEND_PROPERTY_NOT_EMPTY && result ) {
1691
1697
if (EXPECTED (!EG (exception )) && zobj -> ce -> __get && !((* guard ) & IN_GET )) {
1692
1698
(* guard ) |= IN_GET ;
1693
1699
zend_std_call_getter (zobj , name , & rv );
1694
1700
(* guard ) &= ~IN_GET ;
1695
1701
result = i_zend_is_true (& rv );
1696
1702
zval_ptr_dtor (& rv );
1703
+ /* TODO: need to do something if retval is an object which cannot be converted to bool? */
1697
1704
} else {
1698
1705
result = 0 ;
1699
1706
}
0 commit comments