laruence                                 Thu, 03 Nov 2011 03:59:41 +0000

Revision: http://svn.php.net/viewvc?view=revision&revision=318716

Log:
Fix bug #60169 Conjunction of ternary and list crashes PHP

Bug: https://bugs.php.net/60169 (Assigned) Conjunction of ternary and list 
crashes PHP
      
Changed paths:
    U   php/php-src/branches/PHP_5_4/NEWS
    U   php/php-src/branches/PHP_5_4/Zend/tests/bug60169.phpt
    U   php/php-src/branches/PHP_5_4/Zend/zend_vm_def.h
    U   php/php-src/branches/PHP_5_4/Zend/zend_vm_execute.h
    U   php/php-src/trunk/Zend/tests/bug60169.phpt
    U   php/php-src/trunk/Zend/zend_vm_def.h
    U   php/php-src/trunk/Zend/zend_vm_execute.h

Modified: php/php-src/branches/PHP_5_4/NEWS
===================================================================
--- php/php-src/branches/PHP_5_4/NEWS	2011-11-03 02:52:28 UTC (rev 318715)
+++ php/php-src/branches/PHP_5_4/NEWS	2011-11-03 03:59:41 UTC (rev 318716)
@@ -17,6 +17,8 @@
     the data exceeds or is equal to 2048 bytes). (Pierre, Pascal Borreli)
   . Fixed bug #60174 (Notice when array in method prototype error).
     (Laruence)
+  . Fixed bug #60169 (Conjunction of ternary and list crashes PHP).
+    (Laruence)

 - Oracle Database extension (OCI8):
   . Increased maxium Oracle error message buffer length for new 11.2.0.3 size

Modified: php/php-src/branches/PHP_5_4/Zend/tests/bug60169.phpt
===================================================================
--- php/php-src/branches/PHP_5_4/Zend/tests/bug60169.phpt	2011-11-03 02:52:28 UTC (rev 318715)
+++ php/php-src/branches/PHP_5_4/Zend/tests/bug60169.phpt	2011-11-03 03:59:41 UTC (rev 318716)
@@ -1,7 +1,5 @@
 --TEST--
 Bug #60169 (Conjunction of ternary and list crashes PHP)
---XFAIL--
-See Bug #60169, doesn't fixed yet
 --FILE--
 <?php
 error_reporting(0);

Modified: php/php-src/branches/PHP_5_4/Zend/zend_vm_def.h
===================================================================
--- php/php-src/branches/PHP_5_4/Zend/zend_vm_def.h	2011-11-03 02:52:28 UTC (rev 318715)
+++ php/php-src/branches/PHP_5_4/Zend/zend_vm_def.h	2011-11-03 03:59:41 UTC (rev 318716)
@@ -4689,12 +4689,12 @@
 		if (OP1_TYPE == IS_VAR || OP1_TYPE == IS_CV) {
 			Z_ADDREF_P(value);
 			EX_T(opline->result.var).var.ptr = value;
-			EX_T(opline->result.var).var.ptr_ptr = NULL;
+			EX_T(opline->result.var).var.ptr_ptr = &EX_T(opline->result.var).var.ptr;
 		} else {
 			ALLOC_ZVAL(ret);
 			INIT_PZVAL_COPY(ret, value);
 			EX_T(opline->result.var).var.ptr = ret;
-			EX_T(opline->result.var).var.ptr_ptr = NULL;
+			EX_T(opline->result.var).var.ptr_ptr = &EX_T(opline->result.var).var.ptr;
 			if (!IS_OP1_TMP_FREE()) {
 				zval_copy_ctor(EX_T(opline->result.var).var.ptr);
 			}
@@ -4741,12 +4741,12 @@
 	if (OP1_TYPE == IS_VAR || OP1_TYPE == IS_CV) {
 		Z_ADDREF_P(value);
 		EX_T(opline->result.var).var.ptr = value;
-		EX_T(opline->result.var).var.ptr_ptr = NULL;
+		EX_T(opline->result.var).var.ptr_ptr = &EX_T(opline->result.var).var.ptr;
 	} else {
 		ALLOC_ZVAL(ret);
 		INIT_PZVAL_COPY(ret, value);
 		EX_T(opline->result.var).var.ptr = ret;
-		EX_T(opline->result.var).var.ptr_ptr = NULL;
+		EX_T(opline->result.var).var.ptr_ptr = &EX_T(opline->result.var).var.ptr;
 		if (!IS_OP1_TMP_FREE()) {
 			zval_copy_ctor(EX_T(opline->result.var).var.ptr);
 		}

Modified: php/php-src/branches/PHP_5_4/Zend/zend_vm_execute.h
===================================================================
--- php/php-src/branches/PHP_5_4/Zend/zend_vm_execute.h	2011-11-03 02:52:28 UTC (rev 318715)
+++ php/php-src/branches/PHP_5_4/Zend/zend_vm_execute.h	2011-11-03 03:59:41 UTC (rev 318716)
@@ -2863,12 +2863,12 @@
 		if (IS_CONST == IS_VAR || IS_CONST == IS_CV) {
 			Z_ADDREF_P(value);
 			EX_T(opline->result.var).var.ptr = value;
-			EX_T(opline->result.var).var.ptr_ptr = NULL;
+			EX_T(opline->result.var).var.ptr_ptr = &EX_T(opline->result.var).var.ptr;
 		} else {
 			ALLOC_ZVAL(ret);
 			INIT_PZVAL_COPY(ret, value);
 			EX_T(opline->result.var).var.ptr = ret;
-			EX_T(opline->result.var).var.ptr_ptr = NULL;
+			EX_T(opline->result.var).var.ptr_ptr = &EX_T(opline->result.var).var.ptr;
 			if (!0) {
 				zval_copy_ctor(EX_T(opline->result.var).var.ptr);
 			}
@@ -2914,12 +2914,12 @@
 	if (IS_CONST == IS_VAR || IS_CONST == IS_CV) {
 		Z_ADDREF_P(value);
 		EX_T(opline->result.var).var.ptr = value;
-		EX_T(opline->result.var).var.ptr_ptr = NULL;
+		EX_T(opline->result.var).var.ptr_ptr = &EX_T(opline->result.var).var.ptr;
 	} else {
 		ALLOC_ZVAL(ret);
 		INIT_PZVAL_COPY(ret, value);
 		EX_T(opline->result.var).var.ptr = ret;
-		EX_T(opline->result.var).var.ptr_ptr = NULL;
+		EX_T(opline->result.var).var.ptr_ptr = &EX_T(opline->result.var).var.ptr;
 		if (!0) {
 			zval_copy_ctor(EX_T(opline->result.var).var.ptr);
 		}
@@ -7223,12 +7223,12 @@
 		if (IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) {
 			Z_ADDREF_P(value);
 			EX_T(opline->result.var).var.ptr = value;
-			EX_T(opline->result.var).var.ptr_ptr = NULL;
+			EX_T(opline->result.var).var.ptr_ptr = &EX_T(opline->result.var).var.ptr;
 		} else {
 			ALLOC_ZVAL(ret);
 			INIT_PZVAL_COPY(ret, value);
 			EX_T(opline->result.var).var.ptr = ret;
-			EX_T(opline->result.var).var.ptr_ptr = NULL;
+			EX_T(opline->result.var).var.ptr_ptr = &EX_T(opline->result.var).var.ptr;
 			if (!1) {
 				zval_copy_ctor(EX_T(opline->result.var).var.ptr);
 			}
@@ -7275,12 +7275,12 @@
 	if (IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) {
 		Z_ADDREF_P(value);
 		EX_T(opline->result.var).var.ptr = value;
-		EX_T(opline->result.var).var.ptr_ptr = NULL;
+		EX_T(opline->result.var).var.ptr_ptr = &EX_T(opline->result.var).var.ptr;
 	} else {
 		ALLOC_ZVAL(ret);
 		INIT_PZVAL_COPY(ret, value);
 		EX_T(opline->result.var).var.ptr = ret;
-		EX_T(opline->result.var).var.ptr_ptr = NULL;
+		EX_T(opline->result.var).var.ptr_ptr = &EX_T(opline->result.var).var.ptr;
 		if (!1) {
 			zval_copy_ctor(EX_T(opline->result.var).var.ptr);
 		}
@@ -11694,12 +11694,12 @@
 		if (IS_VAR == IS_VAR || IS_VAR == IS_CV) {
 			Z_ADDREF_P(value);
 			EX_T(opline->result.var).var.ptr = value;
-			EX_T(opline->result.var).var.ptr_ptr = NULL;
+			EX_T(opline->result.var).var.ptr_ptr = &EX_T(opline->result.var).var.ptr;
 		} else {
 			ALLOC_ZVAL(ret);
 			INIT_PZVAL_COPY(ret, value);
 			EX_T(opline->result.var).var.ptr = ret;
-			EX_T(opline->result.var).var.ptr_ptr = NULL;
+			EX_T(opline->result.var).var.ptr_ptr = &EX_T(opline->result.var).var.ptr;
 			if (!0) {
 				zval_copy_ctor(EX_T(opline->result.var).var.ptr);
 			}
@@ -11746,12 +11746,12 @@
 	if (IS_VAR == IS_VAR || IS_VAR == IS_CV) {
 		Z_ADDREF_P(value);
 		EX_T(opline->result.var).var.ptr = value;
-		EX_T(opline->result.var).var.ptr_ptr = NULL;
+		EX_T(opline->result.var).var.ptr_ptr = &EX_T(opline->result.var).var.ptr;
 	} else {
 		ALLOC_ZVAL(ret);
 		INIT_PZVAL_COPY(ret, value);
 		EX_T(opline->result.var).var.ptr = ret;
-		EX_T(opline->result.var).var.ptr_ptr = NULL;
+		EX_T(opline->result.var).var.ptr_ptr = &EX_T(opline->result.var).var.ptr;
 		if (!0) {
 			zval_copy_ctor(EX_T(opline->result.var).var.ptr);
 		}
@@ -27346,12 +27346,12 @@
 		if (IS_CV == IS_VAR || IS_CV == IS_CV) {
 			Z_ADDREF_P(value);
 			EX_T(opline->result.var).var.ptr = value;
-			EX_T(opline->result.var).var.ptr_ptr = NULL;
+			EX_T(opline->result.var).var.ptr_ptr = &EX_T(opline->result.var).var.ptr;
 		} else {
 			ALLOC_ZVAL(ret);
 			INIT_PZVAL_COPY(ret, value);
 			EX_T(opline->result.var).var.ptr = ret;
-			EX_T(opline->result.var).var.ptr_ptr = NULL;
+			EX_T(opline->result.var).var.ptr_ptr = &EX_T(opline->result.var).var.ptr;
 			if (!0) {
 				zval_copy_ctor(EX_T(opline->result.var).var.ptr);
 			}
@@ -27397,12 +27397,12 @@
 	if (IS_CV == IS_VAR || IS_CV == IS_CV) {
 		Z_ADDREF_P(value);
 		EX_T(opline->result.var).var.ptr = value;
-		EX_T(opline->result.var).var.ptr_ptr = NULL;
+		EX_T(opline->result.var).var.ptr_ptr = &EX_T(opline->result.var).var.ptr;
 	} else {
 		ALLOC_ZVAL(ret);
 		INIT_PZVAL_COPY(ret, value);
 		EX_T(opline->result.var).var.ptr = ret;
-		EX_T(opline->result.var).var.ptr_ptr = NULL;
+		EX_T(opline->result.var).var.ptr_ptr = &EX_T(opline->result.var).var.ptr;
 		if (!0) {
 			zval_copy_ctor(EX_T(opline->result.var).var.ptr);
 		}

Modified: php/php-src/trunk/Zend/tests/bug60169.phpt
===================================================================
--- php/php-src/trunk/Zend/tests/bug60169.phpt	2011-11-03 02:52:28 UTC (rev 318715)
+++ php/php-src/trunk/Zend/tests/bug60169.phpt	2011-11-03 03:59:41 UTC (rev 318716)
@@ -1,7 +1,5 @@
 --TEST--
 Bug #60169 (Conjunction of ternary and list crashes PHP)
---XFAIL--
-See Bug #60169, doesn't fixed yet
 --FILE--
 <?php
 error_reporting(0);

Modified: php/php-src/trunk/Zend/zend_vm_def.h
===================================================================
--- php/php-src/trunk/Zend/zend_vm_def.h	2011-11-03 02:52:28 UTC (rev 318715)
+++ php/php-src/trunk/Zend/zend_vm_def.h	2011-11-03 03:59:41 UTC (rev 318716)
@@ -4689,12 +4689,12 @@
 		if (OP1_TYPE == IS_VAR || OP1_TYPE == IS_CV) {
 			Z_ADDREF_P(value);
 			EX_T(opline->result.var).var.ptr = value;
-			EX_T(opline->result.var).var.ptr_ptr = NULL;
+			EX_T(opline->result.var).var.ptr_ptr = &EX_T(opline->result.var).var.ptr;
 		} else {
 			ALLOC_ZVAL(ret);
 			INIT_PZVAL_COPY(ret, value);
 			EX_T(opline->result.var).var.ptr = ret;
-			EX_T(opline->result.var).var.ptr_ptr = NULL;
+			EX_T(opline->result.var).var.ptr_ptr = &EX_T(opline->result.var).var.ptr;
 			if (!IS_OP1_TMP_FREE()) {
 				zval_copy_ctor(EX_T(opline->result.var).var.ptr);
 			}
@@ -4741,12 +4741,12 @@
 	if (OP1_TYPE == IS_VAR || OP1_TYPE == IS_CV) {
 		Z_ADDREF_P(value);
 		EX_T(opline->result.var).var.ptr = value;
-		EX_T(opline->result.var).var.ptr_ptr = NULL;
+		EX_T(opline->result.var).var.ptr_ptr = &EX_T(opline->result.var).var.ptr;
 	} else {
 		ALLOC_ZVAL(ret);
 		INIT_PZVAL_COPY(ret, value);
 		EX_T(opline->result.var).var.ptr = ret;
-		EX_T(opline->result.var).var.ptr_ptr = NULL;
+		EX_T(opline->result.var).var.ptr_ptr = &EX_T(opline->result.var).var.ptr;
 		if (!IS_OP1_TMP_FREE()) {
 			zval_copy_ctor(EX_T(opline->result.var).var.ptr);
 		}

Modified: php/php-src/trunk/Zend/zend_vm_execute.h
===================================================================
--- php/php-src/trunk/Zend/zend_vm_execute.h	2011-11-03 02:52:28 UTC (rev 318715)
+++ php/php-src/trunk/Zend/zend_vm_execute.h	2011-11-03 03:59:41 UTC (rev 318716)
@@ -2863,12 +2863,12 @@
 		if (IS_CONST == IS_VAR || IS_CONST == IS_CV) {
 			Z_ADDREF_P(value);
 			EX_T(opline->result.var).var.ptr = value;
-			EX_T(opline->result.var).var.ptr_ptr = NULL;
+			EX_T(opline->result.var).var.ptr_ptr = &EX_T(opline->result.var).var.ptr;
 		} else {
 			ALLOC_ZVAL(ret);
 			INIT_PZVAL_COPY(ret, value);
 			EX_T(opline->result.var).var.ptr = ret;
-			EX_T(opline->result.var).var.ptr_ptr = NULL;
+			EX_T(opline->result.var).var.ptr_ptr = &EX_T(opline->result.var).var.ptr;
 			if (!0) {
 				zval_copy_ctor(EX_T(opline->result.var).var.ptr);
 			}
@@ -2914,12 +2914,12 @@
 	if (IS_CONST == IS_VAR || IS_CONST == IS_CV) {
 		Z_ADDREF_P(value);
 		EX_T(opline->result.var).var.ptr = value;
-		EX_T(opline->result.var).var.ptr_ptr = NULL;
+		EX_T(opline->result.var).var.ptr_ptr = &EX_T(opline->result.var).var.ptr;
 	} else {
 		ALLOC_ZVAL(ret);
 		INIT_PZVAL_COPY(ret, value);
 		EX_T(opline->result.var).var.ptr = ret;
-		EX_T(opline->result.var).var.ptr_ptr = NULL;
+		EX_T(opline->result.var).var.ptr_ptr = &EX_T(opline->result.var).var.ptr;
 		if (!0) {
 			zval_copy_ctor(EX_T(opline->result.var).var.ptr);
 		}
@@ -7223,12 +7223,12 @@
 		if (IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) {
 			Z_ADDREF_P(value);
 			EX_T(opline->result.var).var.ptr = value;
-			EX_T(opline->result.var).var.ptr_ptr = NULL;
+			EX_T(opline->result.var).var.ptr_ptr = &EX_T(opline->result.var).var.ptr;
 		} else {
 			ALLOC_ZVAL(ret);
 			INIT_PZVAL_COPY(ret, value);
 			EX_T(opline->result.var).var.ptr = ret;
-			EX_T(opline->result.var).var.ptr_ptr = NULL;
+			EX_T(opline->result.var).var.ptr_ptr = &EX_T(opline->result.var).var.ptr;
 			if (!1) {
 				zval_copy_ctor(EX_T(opline->result.var).var.ptr);
 			}
@@ -7275,12 +7275,12 @@
 	if (IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) {
 		Z_ADDREF_P(value);
 		EX_T(opline->result.var).var.ptr = value;
-		EX_T(opline->result.var).var.ptr_ptr = NULL;
+		EX_T(opline->result.var).var.ptr_ptr = &EX_T(opline->result.var).var.ptr;
 	} else {
 		ALLOC_ZVAL(ret);
 		INIT_PZVAL_COPY(ret, value);
 		EX_T(opline->result.var).var.ptr = ret;
-		EX_T(opline->result.var).var.ptr_ptr = NULL;
+		EX_T(opline->result.var).var.ptr_ptr = &EX_T(opline->result.var).var.ptr;
 		if (!1) {
 			zval_copy_ctor(EX_T(opline->result.var).var.ptr);
 		}
@@ -11694,12 +11694,12 @@
 		if (IS_VAR == IS_VAR || IS_VAR == IS_CV) {
 			Z_ADDREF_P(value);
 			EX_T(opline->result.var).var.ptr = value;
-			EX_T(opline->result.var).var.ptr_ptr = NULL;
+			EX_T(opline->result.var).var.ptr_ptr = &EX_T(opline->result.var).var.ptr;
 		} else {
 			ALLOC_ZVAL(ret);
 			INIT_PZVAL_COPY(ret, value);
 			EX_T(opline->result.var).var.ptr = ret;
-			EX_T(opline->result.var).var.ptr_ptr = NULL;
+			EX_T(opline->result.var).var.ptr_ptr = &EX_T(opline->result.var).var.ptr;
 			if (!0) {
 				zval_copy_ctor(EX_T(opline->result.var).var.ptr);
 			}
@@ -11746,12 +11746,12 @@
 	if (IS_VAR == IS_VAR || IS_VAR == IS_CV) {
 		Z_ADDREF_P(value);
 		EX_T(opline->result.var).var.ptr = value;
-		EX_T(opline->result.var).var.ptr_ptr = NULL;
+		EX_T(opline->result.var).var.ptr_ptr = &EX_T(opline->result.var).var.ptr;
 	} else {
 		ALLOC_ZVAL(ret);
 		INIT_PZVAL_COPY(ret, value);
 		EX_T(opline->result.var).var.ptr = ret;
-		EX_T(opline->result.var).var.ptr_ptr = NULL;
+		EX_T(opline->result.var).var.ptr_ptr = &EX_T(opline->result.var).var.ptr;
 		if (!0) {
 			zval_copy_ctor(EX_T(opline->result.var).var.ptr);
 		}
@@ -27346,12 +27346,12 @@
 		if (IS_CV == IS_VAR || IS_CV == IS_CV) {
 			Z_ADDREF_P(value);
 			EX_T(opline->result.var).var.ptr = value;
-			EX_T(opline->result.var).var.ptr_ptr = NULL;
+			EX_T(opline->result.var).var.ptr_ptr = &EX_T(opline->result.var).var.ptr;
 		} else {
 			ALLOC_ZVAL(ret);
 			INIT_PZVAL_COPY(ret, value);
 			EX_T(opline->result.var).var.ptr = ret;
-			EX_T(opline->result.var).var.ptr_ptr = NULL;
+			EX_T(opline->result.var).var.ptr_ptr = &EX_T(opline->result.var).var.ptr;
 			if (!0) {
 				zval_copy_ctor(EX_T(opline->result.var).var.ptr);
 			}
@@ -27397,12 +27397,12 @@
 	if (IS_CV == IS_VAR || IS_CV == IS_CV) {
 		Z_ADDREF_P(value);
 		EX_T(opline->result.var).var.ptr = value;
-		EX_T(opline->result.var).var.ptr_ptr = NULL;
+		EX_T(opline->result.var).var.ptr_ptr = &EX_T(opline->result.var).var.ptr;
 	} else {
 		ALLOC_ZVAL(ret);
 		INIT_PZVAL_COPY(ret, value);
 		EX_T(opline->result.var).var.ptr = ret;
-		EX_T(opline->result.var).var.ptr_ptr = NULL;
+		EX_T(opline->result.var).var.ptr_ptr = &EX_T(opline->result.var).var.ptr;
 		if (!0) {
 			zval_copy_ctor(EX_T(opline->result.var).var.ptr);
 		}
-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to