tony2001                                 Thu, 03 Nov 2011 08:39:12 +0000

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

Log:
use jmp_addr only when it's initialized

Changed paths:
    U   php/php-src/branches/PHP_5_4/Zend/zend_compile.c
    U   php/php-src/trunk/Zend/zend_compile.c

Modified: php/php-src/branches/PHP_5_4/Zend/zend_compile.c
===================================================================
--- php/php-src/branches/PHP_5_4/Zend/zend_compile.c    2011-11-03 08:25:01 UTC 
(rev 318722)
+++ php/php-src/branches/PHP_5_4/Zend/zend_compile.c    2011-11-03 08:39:12 UTC 
(rev 318723)
@@ -3718,9 +3718,14 @@
        for(i = 0; i < fe->op_array.last; i++) {
                opcode_copy[i] = fe->op_array.opcodes[i];
                if (opcode_copy[i].op1_type != IS_CONST) {
-                       if (opcode_copy[i].op1.jmp_addr >= fe->op_array.opcodes 
&&
-                               opcode_copy[i].op1.jmp_addr <  
fe->op_array.opcodes + fe->op_array.last) {
-                               opcode_copy[i].op1.jmp_addr =  opcode_copy + 
(fe->op_array.opcodes[i].op1.jmp_addr - fe->op_array.opcodes);
+                       switch (opcode_copy[i].opcode) {
+                               case ZEND_GOTO:
+                               case ZEND_JMP:
+                                       if (opcode_copy[i].op1.jmp_addr && 
opcode_copy[i].op1.jmp_addr >= fe->op_array.opcodes &&
+                                               opcode_copy[i].op1.jmp_addr <  
fe->op_array.opcodes + fe->op_array.last) {
+                                               opcode_copy[i].op1.jmp_addr =  
opcode_copy + (fe->op_array.opcodes[i].op1.jmp_addr - fe->op_array.opcodes);
+                                       }
+                               break;
                        }
                } else {
                        /* if __CLASS__ i.e. T_CLASS_C was used, we need to fix 
it up here */
@@ -3739,9 +3744,18 @@
                }

                if (opcode_copy[i].op2_type != IS_CONST) {
-                       if (opcode_copy[i].op2.jmp_addr >= fe->op_array.opcodes 
&&
-                               opcode_copy[i].op2.jmp_addr <  
fe->op_array.opcodes + fe->op_array.last) {
-                               opcode_copy[i].op2.jmp_addr =  opcode_copy + 
(fe->op_array.opcodes[i].op2.jmp_addr - fe->op_array.opcodes);
+                       switch (opcode_copy[i].opcode) {
+                               case ZEND_JMPZ:
+                               case ZEND_JMPNZ:
+                               case ZEND_JMPZ_EX:
+                               case ZEND_JMPNZ_EX:
+                               case ZEND_JMP_SET:
+                               case ZEND_JMP_SET_VAR:
+                                       if (opcode_copy[i].op2.jmp_addr && 
opcode_copy[i].op2.jmp_addr >= fe->op_array.opcodes &&
+                                               opcode_copy[i].op2.jmp_addr <  
fe->op_array.opcodes + fe->op_array.last) {
+                                               opcode_copy[i].op2.jmp_addr =  
opcode_copy + (fe->op_array.opcodes[i].op2.jmp_addr - fe->op_array.opcodes);
+                                       }
+                               break;
                        }
                } else {
                        /* if __CLASS__ i.e. T_CLASS_C was used, we need to fix 
it up here */

Modified: php/php-src/trunk/Zend/zend_compile.c
===================================================================
--- php/php-src/trunk/Zend/zend_compile.c       2011-11-03 08:25:01 UTC (rev 
318722)
+++ php/php-src/trunk/Zend/zend_compile.c       2011-11-03 08:39:12 UTC (rev 
318723)
@@ -3718,9 +3718,14 @@
        for(i = 0; i < fe->op_array.last; i++) {
                opcode_copy[i] = fe->op_array.opcodes[i];
                if (opcode_copy[i].op1_type != IS_CONST) {
-                       if (opcode_copy[i].op1.jmp_addr >= fe->op_array.opcodes 
&&
-                               opcode_copy[i].op1.jmp_addr <  
fe->op_array.opcodes + fe->op_array.last) {
-                               opcode_copy[i].op1.jmp_addr =  opcode_copy + 
(fe->op_array.opcodes[i].op1.jmp_addr - fe->op_array.opcodes);
+                       switch (opcode_copy[i].opcode) {
+                               case ZEND_GOTO:
+                               case ZEND_JMP:
+                                       if (opcode_copy[i].op1.jmp_addr && 
opcode_copy[i].op1.jmp_addr >= fe->op_array.opcodes &&
+                                               opcode_copy[i].op1.jmp_addr <  
fe->op_array.opcodes + fe->op_array.last) {
+                                               opcode_copy[i].op1.jmp_addr =  
opcode_copy + (fe->op_array.opcodes[i].op1.jmp_addr - fe->op_array.opcodes);
+                                       }
+                               break;
                        }
                } else {
                        /* if __CLASS__ i.e. T_CLASS_C was used, we need to fix 
it up here */
@@ -3739,9 +3744,18 @@
                }

                if (opcode_copy[i].op2_type != IS_CONST) {
-                       if (opcode_copy[i].op2.jmp_addr >= fe->op_array.opcodes 
&&
-                               opcode_copy[i].op2.jmp_addr <  
fe->op_array.opcodes + fe->op_array.last) {
-                               opcode_copy[i].op2.jmp_addr =  opcode_copy + 
(fe->op_array.opcodes[i].op2.jmp_addr - fe->op_array.opcodes);
+                       switch (opcode_copy[i].opcode) {
+                               case ZEND_JMPZ:
+                               case ZEND_JMPNZ:
+                               case ZEND_JMPZ_EX:
+                               case ZEND_JMPNZ_EX:
+                               case ZEND_JMP_SET:
+                               case ZEND_JMP_SET_VAR:
+                                       if (opcode_copy[i].op2.jmp_addr && 
opcode_copy[i].op2.jmp_addr >= fe->op_array.opcodes &&
+                                               opcode_copy[i].op2.jmp_addr <  
fe->op_array.opcodes + fe->op_array.last) {
+                                               opcode_copy[i].op2.jmp_addr =  
opcode_copy + (fe->op_array.opcodes[i].op2.jmp_addr - fe->op_array.opcodes);
+                                       }
+                               break;
                        }
                } else {
                        /* if __CLASS__ i.e. T_CLASS_C was used, we need to fix 
it up here */

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to