]> granicus.if.org Git - php/commitdiff
Fix possible corruption in line number information
authorZeev Suraski <zeev@php.net>
Sat, 30 Dec 2000 15:32:12 +0000 (15:32 +0000)
committerZeev Suraski <zeev@php.net>
Sat, 30 Dec 2000 15:32:12 +0000 (15:32 +0000)
Zend/zend_language_scanner.l
Zend/zend_opcode.c

index 8b3d8ea5da88b8887d3c518ac9ed082944d0b46d..515327608922eb3a8bb3156259a7ce7061cd20b8 100644 (file)
@@ -475,7 +475,6 @@ zend_op_array *compile_string(zval *source_string, char *filename CLS_DC)
                CG(ZFL)->BeginState(ST_IN_SCRIPTING);
 #endif
                compiler_result = zendparse(CLS_C);
-               restore_lexical_state(&original_lex_state CLS_CC);
                
                if (compiler_result==1) {
                        CG(active_op_array) = original_active_op_array;
@@ -487,6 +486,7 @@ zend_op_array *compile_string(zval *source_string, char *filename CLS_DC)
                        pass_two(op_array);
                        retval = op_array;
                }
+               restore_lexical_state(&original_lex_state CLS_CC);
        }
 #ifdef ZTS
        delete input_stream;
index ca1fc546e931d1fcbbee8497efad005117d61e9c..793124524ede32b14d3455ba26b54db9fb284d37 100644 (file)
@@ -251,7 +251,9 @@ static void zend_update_extended_info(zend_op_array *op_array CLS_DC)
                                        opline++;
                                        continue;
                                }
-                               opline->lineno = (opline+1)->lineno;
+                               if (opline+1<end) {
+                                       opline->lineno = (opline+1)->lineno;
+                               }
                        } else {
                                opline->opcode = ZEND_NOP;
                        }
@@ -262,9 +264,6 @@ static void zend_update_extended_info(zend_op_array *op_array CLS_DC)
        opline->opcode = ZEND_EXT_STMT;
        SET_UNUSED(opline->op1);
        SET_UNUSED(opline->op2);
-       if (op_array->last>0) {
-               opline->lineno= op_array->opcodes[op_array->last-2].lineno;
-       }
 }