diff options
author | Nikita Popov <nikita.ppv@gmail.com> | 2021-01-26 12:50:28 +0100 |
---|---|---|
committer | Nikita Popov <nikita.ppv@gmail.com> | 2021-01-26 12:51:02 +0100 |
commit | 776726da0387daa190b2a27733800a556f6dc4b6 (patch) | |
tree | 84469af804cb0b3ec58af0b4b51cc16016814821 | |
parent | 1954e5975846b3952ce1d2d6506e6d7134c89684 (diff) | |
download | php-git-776726da0387daa190b2a27733800a556f6dc4b6.tar.gz |
Add missing resource key warning for unset()
It was present on other operations, including isset(), but was
missing for unset().
-rw-r--r-- | Zend/tests/resource_key.phpt | 36 | ||||
-rw-r--r-- | Zend/zend_vm_def.h | 1 | ||||
-rw-r--r-- | Zend/zend_vm_execute.h | 6 |
3 files changed, 43 insertions, 0 deletions
diff --git a/Zend/tests/resource_key.phpt b/Zend/tests/resource_key.phpt new file mode 100644 index 0000000000..fddd41bcad --- /dev/null +++ b/Zend/tests/resource_key.phpt @@ -0,0 +1,36 @@ +--TEST-- +Behavior of resources as array keys +--FILE-- +<?php + +$r = fopen(__FILE__, 'r'); +$a = []; +echo "Assign:"; +$a[$r] = 1; +echo "Add assign:"; +$a[$r] += 1; +echo "Inc:"; +$a[$r]++; +echo "Get:"; +var_dump($a[$r]); +echo "Isset:"; +var_dump(isset($a[$r])); +echo "Unset:"; +unset($a[$r]); + +?> +--EXPECTF-- +Assign: +Warning: Resource ID#%d used as offset, casting to integer (%d) in %s on line %d +Add assign: +Warning: Resource ID#%d used as offset, casting to integer (%d) in %s on line %d +Inc: +Warning: Resource ID#%d used as offset, casting to integer (%d) in %s on line %d +Get: +Warning: Resource ID#%d used as offset, casting to integer (%d) in %s on line %d +int(3) +Isset: +Warning: Resource ID#%d used as offset, casting to integer (%d) in %s on line %d +bool(true) +Unset: +Warning: Resource ID#%d used as offset, casting to integer (%d) in %s on line %d diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h index 60b1ac3b90..e55e5d02e2 100644 --- a/Zend/zend_vm_def.h +++ b/Zend/zend_vm_def.h @@ -6396,6 +6396,7 @@ ZEND_VM_C_LABEL(num_index_dim): hval = 1; ZEND_VM_C_GOTO(num_index_dim); } else if (Z_TYPE_P(offset) == IS_RESOURCE) { + zend_use_resource_as_offset(offset); hval = Z_RES_HANDLE_P(offset); ZEND_VM_C_GOTO(num_index_dim); } else if (OP2_TYPE == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) { diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h index 2046afba55..fc77948f6b 100644 --- a/Zend/zend_vm_execute.h +++ b/Zend/zend_vm_execute.h @@ -24382,6 +24382,7 @@ num_index_dim: hval = 1; goto num_index_dim; } else if (Z_TYPE_P(offset) == IS_RESOURCE) { + zend_use_resource_as_offset(offset); hval = Z_RES_HANDLE_P(offset); goto num_index_dim; } else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) { @@ -26532,6 +26533,7 @@ num_index_dim: hval = 1; goto num_index_dim; } else if (Z_TYPE_P(offset) == IS_RESOURCE) { + zend_use_resource_as_offset(offset); hval = Z_RES_HANDLE_P(offset); goto num_index_dim; } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) { @@ -30543,6 +30545,7 @@ num_index_dim: hval = 1; goto num_index_dim; } else if (Z_TYPE_P(offset) == IS_RESOURCE) { + zend_use_resource_as_offset(offset); hval = Z_RES_HANDLE_P(offset); goto num_index_dim; } else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) { @@ -41807,6 +41810,7 @@ num_index_dim: hval = 1; goto num_index_dim; } else if (Z_TYPE_P(offset) == IS_RESOURCE) { + zend_use_resource_as_offset(offset); hval = Z_RES_HANDLE_P(offset); goto num_index_dim; } else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) { @@ -45250,6 +45254,7 @@ num_index_dim: hval = 1; goto num_index_dim; } else if (Z_TYPE_P(offset) == IS_RESOURCE) { + zend_use_resource_as_offset(offset); hval = Z_RES_HANDLE_P(offset); goto num_index_dim; } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) { @@ -50372,6 +50377,7 @@ num_index_dim: hval = 1; goto num_index_dim; } else if (Z_TYPE_P(offset) == IS_RESOURCE) { + zend_use_resource_as_offset(offset); hval = Z_RES_HANDLE_P(offset); goto num_index_dim; } else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) { |