summaryrefslogtreecommitdiff
path: root/ext/spl/spl_fixedarray.c
diff options
context:
space:
mode:
Diffstat (limited to 'ext/spl/spl_fixedarray.c')
-rw-r--r--ext/spl/spl_fixedarray.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/ext/spl/spl_fixedarray.c b/ext/spl/spl_fixedarray.c
index 9fb74902a7..3dd5b0656f 100644
--- a/ext/spl/spl_fixedarray.c
+++ b/ext/spl/spl_fixedarray.c
@@ -346,6 +346,21 @@ static zval *spl_fixedarray_object_read_dimension(zval *object, zval *offset, in
intern = Z_SPLFIXEDARRAY_P(object);
+ if (type == BP_VAR_IS && intern->fptr_offset_has) {
+ SEPARATE_ARG_IF_REF(offset);
+ zend_call_method_with_1_params(object, intern->std.ce, &intern->fptr_offset_has, "offsetexists", rv, offset);
+ if (UNEXPECTED(Z_ISUNDEF_P(rv))) {
+ zval_ptr_dtor(offset);
+ return NULL;
+ }
+ if (!i_zend_is_true(rv)) {
+ zval_ptr_dtor(offset);
+ zval_ptr_dtor(rv);
+ return &EG(uninitialized_zval);
+ }
+ zval_ptr_dtor(rv);
+ }
+
if (intern->fptr_offset_get) {
zval tmp;
if (!offset) {