From: Christoph M. Becker Date: Mon, 23 Mar 2020 12:59:22 +0000 (+0100) Subject: Merge branch 'PHP-7.4' X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=bdb63a3068f3acbc081469afc3b5a3737a9e1253;p=php Merge branch 'PHP-7.4' * PHP-7.4: Fix #79393: Null coalescing operator failing with SplFixedArray --- bdb63a3068f3acbc081469afc3b5a3737a9e1253 diff --cc ext/spl/spl_fixedarray.c index 099398de6a,bceaf2be93..ce3cd2635e --- a/ext/spl/spl_fixedarray.c +++ b/ext/spl/spl_fixedarray.c @@@ -333,25 -337,16 +333,16 @@@ static inline zval *spl_fixedarray_obje } /* }}} */ -static int spl_fixedarray_object_has_dimension(zval *object, zval *offset, int check_empty); ++static int spl_fixedarray_object_has_dimension(zend_object *object, zval *offset, int check_empty); + -static zval *spl_fixedarray_object_read_dimension(zval *object, zval *offset, int type, zval *rv) /* {{{ */ +static zval *spl_fixedarray_object_read_dimension(zend_object *object, zval *offset, int type, zval *rv) /* {{{ */ { spl_fixedarray_object *intern; - intern = Z_SPLFIXEDARRAY_P(object); + intern = spl_fixed_array_from_obj(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 (type == BP_VAR_IS && !spl_fixedarray_object_has_dimension(object, offset, 0)) { + return &EG(uninitialized_zval); } if (intern->fptr_offset_get) {