diff options
Diffstat (limited to 'ext/spl/spl_fixedarray.c')
-rw-r--r-- | ext/spl/spl_fixedarray.c | 15 |
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) { |