Skip to content

Commit 0716269

Browse files
committed
Review zend_is_true() usage in zend_object_handlers.c
1 parent 00e814d commit 0716269

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
@@ -619,6 +619,7 @@ ZEND_API zval *zend_std_read_property(zend_object *zobj, zend_string *name, int
619619
*guard &= ~IN_ISSET;
620620

621621
if (!zend_is_true(&tmp_result)) {
622+
/* handles case when tmp_result is an object which cannot be converted to bool */
622623
retval = &EG(uninitialized_zval);
623624
OBJ_RELEASE(zobj);
624625
zval_ptr_dtor(&tmp_result);
@@ -834,6 +835,7 @@ ZEND_API zval *zend_std_read_dimension(zend_object *object, zval *offset, int ty
834835
return NULL;
835836
}
836837
if (!i_zend_is_true(rv)) {
838+
/* handles case when tmp_result is an object which cannot be converted to bool */
837839
OBJ_RELEASE(object);
838840
zval_ptr_dtor(&tmp_offset);
839841
zval_ptr_dtor(rv);
@@ -892,12 +894,14 @@ ZEND_API int zend_std_has_dimension(zend_object *object, zval *offset, int check
892894
ZVAL_COPY_DEREF(&tmp_offset, offset);
893895
GC_ADDREF(object);
894896
zend_call_method_with_1_params(object, ce, NULL, "offsetexists", &retval, &tmp_offset);
897+
ZEND_ASSERT(Z_TYPE(retval) != IS_OBJECT);
895898
result = i_zend_is_true(&retval);
896899
zval_ptr_dtor(&retval);
897900
if (check_empty && result && EXPECTED(!EG(exception))) {
898901
zend_call_method_with_1_params(object, ce, NULL, "offsetget", &retval, &tmp_offset);
899902
result = i_zend_is_true(&retval);
900903
zval_ptr_dtor(&retval);
904+
/* TODO: need to do something if retval is an object which cannot be converted to bool? */
901905
}
902906
OBJ_RELEASE(object);
903907
zval_ptr_dtor(&tmp_offset);
@@ -1655,6 +1659,7 @@ ZEND_API int zend_std_has_property(zend_object *zobj, zend_string *name, int has
16551659
found:
16561660
if (has_set_exists == ZEND_PROPERTY_NOT_EMPTY) {
16571661
result = zend_is_true(value);
1662+
/* TODO: need to do something if retval is an object which cannot be converted to bool? */
16581663
} else if (has_set_exists < ZEND_PROPERTY_NOT_EMPTY) {
16591664
ZEND_ASSERT(has_set_exists == ZEND_PROPERTY_ISSET);
16601665
ZVAL_DEREF(value);
@@ -1687,13 +1692,15 @@ ZEND_API int zend_std_has_property(zend_object *zobj, zend_string *name, int has
16871692
zend_std_call_issetter(zobj, name, &rv);
16881693
result = zend_is_true(&rv);
16891694
zval_ptr_dtor(&rv);
1695+
/* TODO: need to do something if retval is an object which cannot be converted to bool? */
16901696
if (has_set_exists == ZEND_PROPERTY_NOT_EMPTY && result) {
16911697
if (EXPECTED(!EG(exception)) && zobj->ce->__get && !((*guard) & IN_GET)) {
16921698
(*guard) |= IN_GET;
16931699
zend_std_call_getter(zobj, name, &rv);
16941700
(*guard) &= ~IN_GET;
16951701
result = i_zend_is_true(&rv);
16961702
zval_ptr_dtor(&rv);
1703+
/* TODO: need to do something if retval is an object which cannot be converted to bool? */
16971704
} else {
16981705
result = 0;
16991706
}

0 commit comments

Comments
 (0)