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