From 1f5412982cd65800b061cef4877d0fd87662568b Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Wed, 28 Sep 2016 23:11:02 +0200 Subject: [PATCH] Handle resource keys in constexpr arrays --- Zend/tests/const_array_with_resource_key.phpt | 15 +++++++++++++++ Zend/zend_compile.c | 3 +++ 2 files changed, 18 insertions(+) create mode 100644 Zend/tests/const_array_with_resource_key.phpt diff --git a/Zend/tests/const_array_with_resource_key.phpt b/Zend/tests/const_array_with_resource_key.phpt new file mode 100644 index 00000000000..2533b787e60 --- /dev/null +++ b/Zend/tests/const_array_with_resource_key.phpt @@ -0,0 +1,15 @@ +--TEST-- +Constexpr arrays should be able to handle resource keys +--FILE-- + 42]; +var_dump(FOO); + +?> +--EXPECTF-- +Strict Standards: Resource ID#%d used as offset, casting to integer (%d) in %s on line %d +array(1) { + [%d]=> + int(42) +} diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index d3bec3714e8..f91f029e486 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -5940,6 +5940,9 @@ void zend_do_add_static_array_element(zval *result, zval *offset, zval *expr) /* case IS_NULL: zend_symtable_update(Z_ARRVAL_P(result), "", 1, &expr, sizeof(zval *), NULL); break; + case IS_RESOURCE: + zend_error(E_STRICT, "Resource ID#%ld used as offset, casting to integer (%ld)", Z_LVAL_P(offset), Z_LVAL_P(offset)); + /* break missing intentionally */ case IS_LONG: case IS_BOOL: zend_hash_index_update(Z_ARRVAL_P(result), Z_LVAL_P(offset), &expr, sizeof(zval *), NULL);