Commit:    85e5e60777209c13c71785da31af86a5e0a98d92
Author:    Dmitry Stogov <dmi...@zend.com>         Thu, 28 Mar 2013 00:03:40 
+0400
Parents:   1182a3356c6c1989a686aab5258e1d47c56b2955
Branches:  PHP-5.4 PHP-5.5 master

Link:       
http://git.php.net/?p=php-src.git;a=commitdiff;h=85e5e60777209c13c71785da31af86a5e0a98d92

Log:
Fixed bug #64529 (Ran out of opcode space)

Bugs:
https://bugs.php.net/64529

Changed paths:
  M  NEWS
  M  Zend/zend_compile.c
  M  Zend/zend_compile.h
  M  Zend/zend_execute_API.c
  M  Zend/zend_language_scanner.c
  M  Zend/zend_language_scanner.l
  M  Zend/zend_language_scanner_defs.h


Diff:
diff --git a/NEWS b/NEWS
index 010b8f1..c085d8f 100644
--- a/NEWS
+++ b/NEWS
@@ -2,6 +2,7 @@ PHP                                                             
           NEWS
 |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
 ?? ??? 2013, PHP 5.4.14
 - Core
+  . Fixed bug #64529 (Ran out of opcode space). (Dmitry)
   . Fixed bug #64515 (Memoryleak when using the same variablename 2times in
     function declaration). (Laruence)
   . Fixed bug #64432 (more empty delimiter warning in strX methods). (Laruence)
diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c
index 766a2de..82275ce 100644
--- a/Zend/zend_compile.c
+++ b/Zend/zend_compile.c
@@ -1798,7 +1798,7 @@ void zend_do_end_function_declaration(const znode 
*function_token TSRMLS_DC) /*
        zend_do_return(NULL, 0 TSRMLS_CC);
 
        pass_two(CG(active_op_array) TSRMLS_CC);
-       zend_release_labels(TSRMLS_C);
+       zend_release_labels(0 TSRMLS_CC);
 
        if (CG(active_class_entry)) {
                zend_check_magic_method_implementation(CG(active_class_entry), 
(zend_function*)CG(active_op_array), E_COMPILE_ERROR TSRMLS_CC);
@@ -2320,13 +2320,14 @@ void zend_do_goto(const znode *label TSRMLS_DC) /* {{{ 
*/
 }
 /* }}} */
 
-void zend_release_labels(TSRMLS_D) /* {{{ */
+void zend_release_labels(int temporary TSRMLS_DC) /* {{{ */
 {
        if (CG(context).labels) {
                zend_hash_destroy(CG(context).labels);
                FREE_HASHTABLE(CG(context).labels);
+               CG(context).labels = NULL;
        }
-       if (!zend_stack_is_empty(&CG(context_stack))) {
+       if (!temporary && !zend_stack_is_empty(&CG(context_stack))) {
                zend_compiler_context *ctx;
 
                zend_stack_top(&CG(context_stack), (void**)&ctx);
diff --git a/Zend/zend_compile.h b/Zend/zend_compile.h
index 50ee3a4..32449d2 100644
--- a/Zend/zend_compile.h
+++ b/Zend/zend_compile.h
@@ -616,7 +616,7 @@ void zend_do_end_compilation(TSRMLS_D);
 void zend_do_label(znode *label TSRMLS_DC);
 void zend_do_goto(const znode *label TSRMLS_DC);
 void zend_resolve_goto_label(zend_op_array *op_array, zend_op *opline, int 
pass2 TSRMLS_DC);
-void zend_release_labels(TSRMLS_D);
+void zend_release_labels(int temporary TSRMLS_DC);
 
 ZEND_API void function_add_ref(zend_function *function);
 
diff --git a/Zend/zend_execute_API.c b/Zend/zend_execute_API.c
index a38504f..09e703c 100644
--- a/Zend/zend_execute_API.c
+++ b/Zend/zend_execute_API.c
@@ -1313,7 +1313,7 @@ void execute_new_code(TSRMLS_D) /* {{{ */
                opline++;
        }
        
-       zend_release_labels(TSRMLS_C);
+       zend_release_labels(1 TSRMLS_CC);
        
        EG(return_value_ptr_ptr) = NULL;
        EG(active_op_array) = CG(active_op_array);
diff --git a/Zend/zend_language_scanner.c b/Zend/zend_language_scanner.c
index 40fb574..03cf334 100644
--- a/Zend/zend_language_scanner.c
+++ b/Zend/zend_language_scanner.c
@@ -1,4 +1,4 @@
-/* Generated by re2c 0.13.5 on Wed Nov 14 17:46:56 2012 */
+/* Generated by re2c 0.13.5 on Wed Mar 27 23:52:29 2013 */
 #line 1 "Zend/zend_language_scanner.l"
 /*
    +----------------------------------------------------------------------+
@@ -595,7 +595,7 @@ ZEND_API zend_op_array *compile_file(zend_file_handle 
*file_handle, int type TSR
                CG(active_op_array) = original_active_op_array;
                if (compilation_successful) {
                        pass_two(op_array TSRMLS_CC);
-                       zend_release_labels(TSRMLS_C);
+                       zend_release_labels(0 TSRMLS_CC);
                } else {
                        efree(op_array);
                        retval = NULL;
@@ -770,7 +770,7 @@ zend_op_array *compile_string(zval *source_string, char 
*filename TSRMLS_DC)
                        zend_do_return(NULL, 0 TSRMLS_CC);
                        CG(active_op_array) = original_active_op_array;
                        pass_two(op_array TSRMLS_CC);
-                       zend_release_labels(TSRMLS_C);
+                       zend_release_labels(0 TSRMLS_CC);
                        retval = op_array;
                }
        }
diff --git a/Zend/zend_language_scanner.l b/Zend/zend_language_scanner.l
index cc54557..97c938e 100644
--- a/Zend/zend_language_scanner.l
+++ b/Zend/zend_language_scanner.l
@@ -593,7 +593,7 @@ ZEND_API zend_op_array *compile_file(zend_file_handle 
*file_handle, int type TSR
                CG(active_op_array) = original_active_op_array;
                if (compilation_successful) {
                        pass_two(op_array TSRMLS_CC);
-                       zend_release_labels(TSRMLS_C);
+                       zend_release_labels(0 TSRMLS_CC);
                } else {
                        efree(op_array);
                        retval = NULL;
@@ -768,7 +768,7 @@ zend_op_array *compile_string(zval *source_string, char 
*filename TSRMLS_DC)
                        zend_do_return(NULL, 0 TSRMLS_CC);
                        CG(active_op_array) = original_active_op_array;
                        pass_two(op_array TSRMLS_CC);
-                       zend_release_labels(TSRMLS_C);
+                       zend_release_labels(0 TSRMLS_CC);
                        retval = op_array;
                }
        }
diff --git a/Zend/zend_language_scanner_defs.h 
b/Zend/zend_language_scanner_defs.h
index 9bde2a0..2e9b5c6 100644
--- a/Zend/zend_language_scanner_defs.h
+++ b/Zend/zend_language_scanner_defs.h
@@ -1,4 +1,4 @@
-/* Generated by re2c 0.13.5 on Wed Nov 14 17:46:56 2012 */
+/* Generated by re2c 0.13.5 on Wed Mar 27 23:52:29 2013 */
 #line 3 "Zend/zend_language_scanner_defs.h"
 
 enum YYCONDTYPE {


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

Reply via email to