summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@zend.com>2013-03-28 00:03:40 +0400
committerDmitry Stogov <dmitry@zend.com>2013-03-28 00:03:40 +0400
commit85e5e60777209c13c71785da31af86a5e0a98d92 (patch)
tree4bf05ea80f01ec86730fa8cfd89626562f81c461
parent1182a3356c6c1989a686aab5258e1d47c56b2955 (diff)
downloadphp-git-85e5e60777209c13c71785da31af86a5e0a98d92.tar.gz
Fixed bug #64529 (Ran out of opcode space)
-rw-r--r--NEWS1
-rw-r--r--Zend/zend_compile.c7
-rw-r--r--Zend/zend_compile.h2
-rw-r--r--Zend/zend_execute_API.c2
-rw-r--r--Zend/zend_language_scanner.c6
-rw-r--r--Zend/zend_language_scanner.l4
-rw-r--r--Zend/zend_language_scanner_defs.h2
7 files changed, 13 insertions, 11 deletions
diff --git a/NEWS b/NEWS
index 010b8f11ab..c085d8f566 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 766a2de01a..82275ce624 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 50ee3a4d7f..32449d2a66 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 a38504fbb4..09e703ca59 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 40fb574559..03cf334dba 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 cc54557b3b..97c938ebf6 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 9bde2a0e14..2e9b5c6535 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 {