@@ -634,6 +634,7 @@ ZEND_API zval *zend_std_read_property(zend_object *zobj, zend_string *name, int
634
634
* guard &= ~IN_ISSET ;
635
635
636
636
if (!zend_is_true (& tmp_result )) {
637
+ /* handles case when tmp_result is an object which cannot be converted to bool */
637
638
retval = & EG (uninitialized_zval );
638
639
OBJ_RELEASE (zobj );
639
640
zval_ptr_dtor (& tmp_result );
@@ -850,6 +851,7 @@ ZEND_API zval *zend_std_read_dimension(zend_object *object, zval *offset, int ty
850
851
return NULL ;
851
852
}
852
853
if (!i_zend_is_true (rv )) {
854
+ /* handles case when tmp_result is an object which cannot be converted to bool */
853
855
OBJ_RELEASE (object );
854
856
zval_ptr_dtor (& tmp_offset );
855
857
zval_ptr_dtor (rv );
@@ -908,12 +910,14 @@ ZEND_API int zend_std_has_dimension(zend_object *object, zval *offset, int check
908
910
ZVAL_COPY_DEREF (& tmp_offset , offset );
909
911
GC_ADDREF (object );
910
912
zend_call_method_with_1_params (object , ce , NULL , "offsetexists" , & retval , & tmp_offset );
913
+ ZEND_ASSERT (Z_TYPE (retval ) != IS_OBJECT );
911
914
result = i_zend_is_true (& retval );
912
915
zval_ptr_dtor (& retval );
913
916
if (check_empty && result && EXPECTED (!EG (exception ))) {
914
917
zend_call_method_with_1_params (object , ce , NULL , "offsetget" , & retval , & tmp_offset );
915
918
result = i_zend_is_true (& retval );
916
919
zval_ptr_dtor (& retval );
920
+ /* TODO: need to do something if retval is an object which cannot be converted to bool? */
917
921
}
918
922
OBJ_RELEASE (object );
919
923
zval_ptr_dtor (& tmp_offset );
@@ -1679,6 +1683,7 @@ ZEND_API int zend_std_has_property(zend_object *zobj, zend_string *name, int has
1679
1683
found :
1680
1684
if (has_set_exists == ZEND_PROPERTY_NOT_EMPTY ) {
1681
1685
result = zend_is_true (value );
1686
+ /* TODO: need to do something if retval is an object which cannot be converted to bool? */
1682
1687
} else if (has_set_exists < ZEND_PROPERTY_NOT_EMPTY ) {
1683
1688
ZEND_ASSERT (has_set_exists == ZEND_PROPERTY_ISSET );
1684
1689
ZVAL_DEREF (value );
@@ -1711,13 +1716,15 @@ ZEND_API int zend_std_has_property(zend_object *zobj, zend_string *name, int has
1711
1716
zend_std_call_issetter (zobj , name , & rv );
1712
1717
result = zend_is_true (& rv );
1713
1718
zval_ptr_dtor (& rv );
1719
+ /* TODO: need to do something if retval is an object which cannot be converted to bool? */
1714
1720
if (has_set_exists == ZEND_PROPERTY_NOT_EMPTY && result ) {
1715
1721
if (EXPECTED (!EG (exception )) && zobj -> ce -> __get && !((* guard ) & IN_GET )) {
1716
1722
(* guard ) |= IN_GET ;
1717
1723
zend_std_call_getter (zobj , name , & rv );
1718
1724
(* guard ) &= ~IN_GET ;
1719
1725
result = i_zend_is_true (& rv );
1720
1726
zval_ptr_dtor (& rv );
1727
+ /* TODO: need to do something if retval is an object which cannot be converted to bool? */
1721
1728
} else {
1722
1729
result = 0 ;
1723
1730
}
0 commit comments