- Spl:
. Fixed bug #75673 (SplStack::unserialize() behavior). (cmb)
+ . Fixed bug #79393 (Null coalescing operator failing with SplFixedArray).
+ (cmb)
- Zip:
. Fixed Bug #79296 (ZipArchive::open fails on empty file). (Remi)
}
/* }}} */
+static int spl_fixedarray_object_has_dimension(zval *object, zval *offset, int check_empty);
+
static zval *spl_fixedarray_object_read_dimension(zval *object, zval *offset, int type, zval *rv) /* {{{ */
{
spl_fixedarray_object *intern;
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 (type == BP_VAR_IS && !spl_fixedarray_object_has_dimension(object, offset, 0)) {
+ return &EG(uninitialized_zval);
}
if (intern->fptr_offset_get) {
--- /dev/null
+--TEST--
+Bug #79393 (Null coalescing operator failing with SplFixedArray)
+--FILE--
+<?php
+$foo = new SplFixedArray(5);
+$foo[0] = 'bar1';
+$foo[1] = 'bar2';
+$foo[2] = 0;
+$foo[3] = false;
+$foo[4] = '';
+
+var_dump($foo[0] ?? null);
+var_dump($foo[1] ?? null);
+var_dump($foo[2] ?? null);
+var_dump($foo[3] ?? null);
+var_dump($foo[4] ?? null);
+var_dump($foo[5] ?? null);
+?>
+--EXPECT--
+string(4) "bar1"
+string(4) "bar2"
+int(0)
+bool(false)
+string(0) ""
+NULL