]> granicus.if.org Git - php/commitdiff
- Fixed bug #50255 (isset() and empty() silently casts array to object)
authorFelipe Pena <felipe@php.net>
Tue, 24 Nov 2009 21:54:12 +0000 (21:54 +0000)
committerFelipe Pena <felipe@php.net>
Tue, 24 Nov 2009 21:54:12 +0000 (21:54 +0000)
Zend/tests/bug50255.phpt [new file with mode: 0644]
Zend/zend_vm_def.h
Zend/zend_vm_execute.h

diff --git a/Zend/tests/bug50255.phpt b/Zend/tests/bug50255.phpt
new file mode 100644 (file)
index 0000000..9f390af
--- /dev/null
@@ -0,0 +1,30 @@
+--TEST--
+Bug #50255 (isset() and empty() silently casts array to object)
+--FILE--
+<?php
+
+$arr = array('foo' => 'bar');
+
+print "isset\n";
+var_dump(isset($arr->foo));
+var_dump(isset($arr->bar));
+var_dump(isset($arr['foo']));
+var_dump(isset($arr['bar']));
+print "empty\n";
+var_dump(empty($arr->foo));
+var_dump(empty($arr->bar));
+var_dump(empty($arr['foo']));
+var_dump(empty($arr['bar']));
+
+?>
+--EXPECT--
+isset
+bool(false)
+bool(false)
+bool(true)
+bool(false)
+empty
+bool(true)
+bool(true)
+bool(false)
+bool(true)
index cbeffa4df6d858d909c5f7662dfd662ce1500dd5..5a3020d616dcdfe3ee15c1e72686f5affed33a13 100644 (file)
@@ -4095,7 +4095,7 @@ ZEND_VM_HELPER_EX(zend_isset_isempty_dim_prop_obj_handler, VAR|UNUSED|CV, CONST|
                zend_free_op free_op2;
                zval *offset = GET_OP2_ZVAL_PTR(BP_VAR_R);
 
-               if (Z_TYPE_PP(container) == IS_ARRAY) {
+               if (Z_TYPE_PP(container) == IS_ARRAY && !prop_dim) {
                        HashTable *ht;
                        int isset = 0;
 
index f1b16ccdd5aa26969f2be225297ca1e4739b6041..c90a479287710e78d92473709d76a0a00df2f269 100644 (file)
@@ -11279,7 +11279,7 @@ static int ZEND_FASTCALL zend_isset_isempty_dim_prop_obj_handler_SPEC_VAR_CONST(
 
                zval *offset = &opline->op2.u.constant;
 
-               if (Z_TYPE_PP(container) == IS_ARRAY) {
+               if (Z_TYPE_PP(container) == IS_ARRAY && !prop_dim) {
                        HashTable *ht;
                        int isset = 0;
 
@@ -13097,7 +13097,7 @@ static int ZEND_FASTCALL zend_isset_isempty_dim_prop_obj_handler_SPEC_VAR_TMP(in
                zend_free_op free_op2;
                zval *offset = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
 
-               if (Z_TYPE_PP(container) == IS_ARRAY) {
+               if (Z_TYPE_PP(container) == IS_ARRAY && !prop_dim) {
                        HashTable *ht;
                        int isset = 0;
 
@@ -14966,7 +14966,7 @@ static int ZEND_FASTCALL zend_isset_isempty_dim_prop_obj_handler_SPEC_VAR_VAR(in
                zend_free_op free_op2;
                zval *offset = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
 
-               if (Z_TYPE_PP(container) == IS_ARRAY) {
+               if (Z_TYPE_PP(container) == IS_ARRAY && !prop_dim) {
                        HashTable *ht;
                        int isset = 0;
 
@@ -17428,7 +17428,7 @@ static int ZEND_FASTCALL zend_isset_isempty_dim_prop_obj_handler_SPEC_VAR_CV(int
 
                zval *offset = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
 
-               if (Z_TYPE_PP(container) == IS_ARRAY) {
+               if (Z_TYPE_PP(container) == IS_ARRAY && !prop_dim) {
                        HashTable *ht;
                        int isset = 0;
 
@@ -18684,7 +18684,7 @@ static int ZEND_FASTCALL zend_isset_isempty_dim_prop_obj_handler_SPEC_UNUSED_CON
 
                zval *offset = &opline->op2.u.constant;
 
-               if (Z_TYPE_PP(container) == IS_ARRAY) {
+               if (Z_TYPE_PP(container) == IS_ARRAY && !prop_dim) {
                        HashTable *ht;
                        int isset = 0;
 
@@ -19799,7 +19799,7 @@ static int ZEND_FASTCALL zend_isset_isempty_dim_prop_obj_handler_SPEC_UNUSED_TMP
                zend_free_op free_op2;
                zval *offset = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
 
-               if (Z_TYPE_PP(container) == IS_ARRAY) {
+               if (Z_TYPE_PP(container) == IS_ARRAY && !prop_dim) {
                        HashTable *ht;
                        int isset = 0;
 
@@ -20914,7 +20914,7 @@ static int ZEND_FASTCALL zend_isset_isempty_dim_prop_obj_handler_SPEC_UNUSED_VAR
                zend_free_op free_op2;
                zval *offset = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
 
-               if (Z_TYPE_PP(container) == IS_ARRAY) {
+               if (Z_TYPE_PP(container) == IS_ARRAY && !prop_dim) {
                        HashTable *ht;
                        int isset = 0;
 
@@ -22287,7 +22287,7 @@ static int ZEND_FASTCALL zend_isset_isempty_dim_prop_obj_handler_SPEC_UNUSED_CV(
 
                zval *offset = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
 
-               if (Z_TYPE_PP(container) == IS_ARRAY) {
+               if (Z_TYPE_PP(container) == IS_ARRAY && !prop_dim) {
                        HashTable *ht;
                        int isset = 0;
 
@@ -25482,7 +25482,7 @@ static int ZEND_FASTCALL zend_isset_isempty_dim_prop_obj_handler_SPEC_CV_CONST(i
 
                zval *offset = &opline->op2.u.constant;
 
-               if (Z_TYPE_PP(container) == IS_ARRAY) {
+               if (Z_TYPE_PP(container) == IS_ARRAY && !prop_dim) {
                        HashTable *ht;
                        int isset = 0;
 
@@ -27188,7 +27188,7 @@ static int ZEND_FASTCALL zend_isset_isempty_dim_prop_obj_handler_SPEC_CV_TMP(int
                zend_free_op free_op2;
                zval *offset = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
 
-               if (Z_TYPE_PP(container) == IS_ARRAY) {
+               if (Z_TYPE_PP(container) == IS_ARRAY && !prop_dim) {
                        HashTable *ht;
                        int isset = 0;
 
@@ -28944,7 +28944,7 @@ static int ZEND_FASTCALL zend_isset_isempty_dim_prop_obj_handler_SPEC_CV_VAR(int
                zend_free_op free_op2;
                zval *offset = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
 
-               if (Z_TYPE_PP(container) == IS_ARRAY) {
+               if (Z_TYPE_PP(container) == IS_ARRAY && !prop_dim) {
                        HashTable *ht;
                        int isset = 0;
 
@@ -31191,7 +31191,7 @@ static int ZEND_FASTCALL zend_isset_isempty_dim_prop_obj_handler_SPEC_CV_CV(int
 
                zval *offset = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
 
-               if (Z_TYPE_PP(container) == IS_ARRAY) {
+               if (Z_TYPE_PP(container) == IS_ARRAY && !prop_dim) {
                        HashTable *ht;
                        int isset = 0;