Skip to content

Commit 32d6566

Browse files
committed
Review zend_is_true() usage in zend_object_handlers.c
1 parent 62f17c1 commit 32d6566

File tree

1 file changed

+7
-0
lines changed

1 file changed

+7
-0
lines changed

Zend/zend_object_handlers.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -634,6 +634,7 @@ ZEND_API zval *zend_std_read_property(zend_object *zobj, zend_string *name, int
634634
*guard &= ~IN_ISSET;
635635

636636
if (!zend_is_true(&tmp_result)) {
637+
/* handles case when tmp_result is an object which cannot be converted to bool */
637638
retval = &EG(uninitialized_zval);
638639
OBJ_RELEASE(zobj);
639640
zval_ptr_dtor(&tmp_result);
@@ -851,6 +852,7 @@ ZEND_API zval *zend_std_read_dimension(zend_object *object, zval *offset, int ty
851852
return NULL;
852853
}
853854
if (!i_zend_is_true(rv)) {
855+
/* handles case when tmp_result is an object which cannot be converted to bool */
854856
OBJ_RELEASE(object);
855857
zval_ptr_dtor(&tmp_offset);
856858
zval_ptr_dtor(rv);
@@ -909,12 +911,14 @@ ZEND_API int zend_std_has_dimension(zend_object *object, zval *offset, int check
909911
ZVAL_COPY_DEREF(&tmp_offset, offset);
910912
GC_ADDREF(object);
911913
zend_call_method_with_1_params(object, ce, NULL, "offsetexists", &retval, &tmp_offset);
914+
ZEND_ASSERT(Z_TYPE(retval) != IS_OBJECT);
912915
result = i_zend_is_true(&retval);
913916
zval_ptr_dtor(&retval);
914917
if (check_empty && result && EXPECTED(!EG(exception))) {
915918
zend_call_method_with_1_params(object, ce, NULL, "offsetget", &retval, &tmp_offset);
916919
result = i_zend_is_true(&retval);
917920
zval_ptr_dtor(&retval);
921+
/* TODO: need to do something if retval is an object which cannot be converted to bool? */
918922
}
919923
OBJ_RELEASE(object);
920924
zval_ptr_dtor(&tmp_offset);
@@ -1676,6 +1680,7 @@ ZEND_API int zend_std_has_property(zend_object *zobj, zend_string *name, int has
16761680
found:
16771681
if (has_set_exists == ZEND_PROPERTY_NOT_EMPTY) {
16781682
result = zend_is_true(value);
1683+
/* TODO: need to do something if retval is an object which cannot be converted to bool? */
16791684
} else if (has_set_exists < ZEND_PROPERTY_NOT_EMPTY) {
16801685
ZEND_ASSERT(has_set_exists == ZEND_PROPERTY_ISSET);
16811686
ZVAL_DEREF(value);
@@ -1708,13 +1713,15 @@ ZEND_API int zend_std_has_property(zend_object *zobj, zend_string *name, int has
17081713
zend_std_call_issetter(zobj, name, &rv);
17091714
result = zend_is_true(&rv);
17101715
zval_ptr_dtor(&rv);
1716+
/* TODO: need to do something if retval is an object which cannot be converted to bool? */
17111717
if (has_set_exists == ZEND_PROPERTY_NOT_EMPTY && result) {
17121718
if (EXPECTED(!EG(exception)) && zobj->ce->__get && !((*guard) & IN_GET)) {
17131719
(*guard) |= IN_GET;
17141720
zend_std_call_getter(zobj, name, &rv);
17151721
(*guard) &= ~IN_GET;
17161722
result = i_zend_is_true(&rv);
17171723
zval_ptr_dtor(&rv);
1724+
/* TODO: need to do something if retval is an object which cannot be converted to bool? */
17181725
} else {
17191726
result = 0;
17201727
}

0 commit comments

Comments
 (0)