]> 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)
NEWS
Zend/tests/bug50255.phpt [new file with mode: 0644]
Zend/zend_vm_def.h
Zend/zend_vm_execute.h

diff --git a/NEWS b/NEWS
index 15f2e0b1d12e827432739317b8094b3007f89ed1..bf2f24bbf2ddb3e8a48c619027ac4fb81fdf085f 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -29,6 +29,8 @@ PHP                                                                        NEWS
 - Fixed bug #50282 (xmlrpc_encode_request() changes object into array in 
   calling function). (Felipe)
 - Fixed bug #50267 (get_browser(null) does not use HTTP_USER_AGENT). (Jani)
+- Fixed bug #50255 (isset() and empty() silently casts array to object).
+  (Felipe)
 - Fixed bug #50240 (pdo_mysql.default_socket in php.ini shouldn't used
   if it is empty). (foutrelis at gmail dot com, Ilia)
 - Fixed bug #50219 (soap call Segmentation fault on a redirected url).
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 621fecde07c4e27e87fa022da5d0d2ef9e6b0a0d..52f200e35d7daeceb2a92c7bb6f390bdc10fc5cf 100644 (file)
@@ -3915,7 +3915,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 e6fd0d314ff3ccdebe06080b1df4a87148985feb..38bd50be16d243b932fb44076ac6ec836c3519df 100644 (file)
@@ -10806,7 +10806,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;
 
@@ -12555,7 +12555,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;
 
@@ -14355,7 +14355,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;
 
@@ -16741,7 +16741,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;
 
@@ -17931,7 +17931,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;
 
@@ -18988,7 +18988,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;
 
@@ -20045,7 +20045,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;
 
@@ -21361,7 +21361,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;
 
@@ -24347,7 +24347,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;
 
@@ -25987,7 +25987,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;
 
@@ -27677,7 +27677,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;
 
@@ -29854,7 +29854,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;