7/8/8.1/10 as "Business"). (Christian Wenz)
. Fixes bug #69835 (phpinfo() does not report many Windows SKUs).
(Christian Wenz)
+ . Fixed bug #69889 (Null coalesce operator doesn't work for string offsets).
+ (Nikita)
- DOM:
. Fixed bug #69846 (Segmenation fault (access violation) when iterating over
--- /dev/null
+--TEST--
+Bug #69889: Null coalesce operator doesn't work for string offsets
+--FILE--
+<?php
+
+$foo = "test";
+var_dump($foo[0] ?? "default");
+
+var_dump($foo[5] ?? "default");
+var_dump(isset($foo[5]) ? $foo[5] : "default");
+
+var_dump($foo["str"] ?? "default");
+var_dump(isset($foo["str"]) ? $foo["str"] : "default");
+
+?>
+--EXPECT--
+string(1) "t"
+string(7) "default"
+string(7) "default"
+string(7) "default"
+string(7) "default"
+
if (IS_LONG == is_numeric_string(Z_STRVAL_P(dim), Z_STRLEN_P(dim), NULL, NULL, -1)) {
break;
}
- if (type != BP_VAR_IS) {
- zend_error(E_WARNING, "Illegal string offset '%s'", Z_STRVAL_P(dim));
+ if (type == BP_VAR_IS) {
+ ZVAL_NULL(result);
+ return;
}
+ zend_error(E_WARNING, "Illegal string offset '%s'", Z_STRVAL_P(dim));
break;
case IS_DOUBLE:
case IS_NULL:
if (UNEXPECTED(offset < 0) || UNEXPECTED(Z_STRLEN_P(container) <= (size_t)offset)) {
if (type != BP_VAR_IS) {
zend_error(E_NOTICE, "Uninitialized string offset: %pd", offset);
+ ZVAL_EMPTY_STRING(result);
+ } else {
+ ZVAL_NULL(result);
}
- ZVAL_EMPTY_STRING(result);
} else {
zend_uchar c = (zend_uchar)Z_STRVAL_P(container)[offset];