dmitry Wed Mar 25 15:23:17 2009 UTC
Modified files: (Branch: PHP_5_3)
/ZendEngine2 zend_globals.h zend_language_scanner.l
/php-src/ext/tokenizer tokenizer.c
Log:
Fixed bug #47038 (Memory leak in include)
http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_globals.h?r1=1.141.2.3.2.7.2.23&r2=1.141.2.3.2.7.2.24&diff_format=u
Index: ZendEngine2/zend_globals.h
diff -u ZendEngine2/zend_globals.h:1.141.2.3.2.7.2.23
ZendEngine2/zend_globals.h:1.141.2.3.2.7.2.24
--- ZendEngine2/zend_globals.h:1.141.2.3.2.7.2.23 Wed Mar 18 10:18:09 2009
+++ ZendEngine2/zend_globals.h Wed Mar 25 15:23:17 2009
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: zend_globals.h,v 1.141.2.3.2.7.2.23 2009/03/18 10:18:09 dmitry Exp $ */
+/* $Id: zend_globals.h,v 1.141.2.3.2.7.2.24 2009/03/25 15:23:17 dmitry Exp $ */
#ifndef ZEND_GLOBALS_H
#define ZEND_GLOBALS_H
@@ -292,8 +292,6 @@
int yy_state;
zend_stack state_stack;
- zend_llist used_state_stacks;
-
#ifdef ZEND_MULTIBYTE
/* original (unfiltered) script */
unsigned char *script_org;
http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_language_scanner.l?r1=1.131.2.11.2.13.2.37&r2=1.131.2.11.2.13.2.38&diff_format=u
Index: ZendEngine2/zend_language_scanner.l
diff -u ZendEngine2/zend_language_scanner.l:1.131.2.11.2.13.2.37
ZendEngine2/zend_language_scanner.l:1.131.2.11.2.13.2.38
--- ZendEngine2/zend_language_scanner.l:1.131.2.11.2.13.2.37 Mon Mar 16
01:40:13 2009
+++ ZendEngine2/zend_language_scanner.l Wed Mar 25 15:23:17 2009
@@ -21,7 +21,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: zend_language_scanner.l,v 1.131.2.11.2.13.2.37 2009/03/16 01:40:13
shire Exp $ */
+/* $Id: zend_language_scanner.l,v 1.131.2.11.2.13.2.38 2009/03/25 15:23:17
dmitry Exp $ */
#if 0
# define YYDEBUG(s, c) printf("state: %d char: %c\n", s, c)
@@ -143,9 +143,7 @@
CG(heredoc_len) = 0;
CG(doc_comment) = NULL;
CG(doc_comment_len) = 0;
- zend_llist_init(&SCNG(used_state_stacks), sizeof(zend_stack),
(llist_dtor_func_t) zend_stack_destroy, 0);
zend_stack_init(&SCNG(state_stack));
- zend_llist_add_element(&SCNG(used_state_stacks), &SCNG(state_stack));
}
void shutdown_scanner(TSRMLS_D)
@@ -154,15 +152,10 @@
efree(CG(heredoc));
CG(heredoc_len)=0;
}
- zend_llist_destroy(&SCNG(used_state_stacks));
+ zend_stack_destroy(&SCNG(state_stack));
RESET_DOC_COMMENT();
}
-static int compare_stacks(zend_stack *stack1, zend_stack *stack2)
-{
- return (stack1 == stack2);
-}
-
ZEND_API void zend_save_lexical_state(zend_lex_state *lex_state TSRMLS_DC)
{
lex_state->yy_leng = SCNG(yy_leng);
@@ -174,7 +167,6 @@
lex_state->state_stack = SCNG(state_stack);
zend_stack_init(&SCNG(state_stack));
- zend_llist_add_element(&SCNG(used_state_stacks), &SCNG(state_stack));
lex_state->in = SCNG(yy_in);
lex_state->yy_state = YYSTATE;
@@ -202,7 +194,7 @@
SCNG(yy_marker) = lex_state->yy_marker;
SCNG(yy_limit) = lex_state->yy_limit;
- zend_llist_del_element(&SCNG(used_state_stacks), &SCNG(state_stack),
(int (*)(void *, void *)) compare_stacks);
+ zend_stack_destroy(&SCNG(state_stack));
SCNG(state_stack) = lex_state->state_stack;
SCNG(yy_in) = lex_state->in;
@@ -361,9 +353,7 @@
retval = NULL;
}
}
- if (compilation_successful) {
- zend_restore_lexical_state(&original_lex_state TSRMLS_CC);
- }
+ zend_restore_lexical_state(&original_lex_state TSRMLS_CC);
return retval;
}
@@ -526,8 +516,8 @@
zend_release_labels(TSRMLS_C);
retval = op_array;
}
- zend_restore_lexical_state(&original_lex_state TSRMLS_CC);
}
+ zend_restore_lexical_state(&original_lex_state TSRMLS_CC);
zval_dtor(&tmp);
CG(in_compilation) = original_in_compilation;
return retval;
@@ -547,6 +537,7 @@
zend_save_lexical_state(&original_lex_state TSRMLS_CC);
if (open_file_for_scanning(&file_handle TSRMLS_CC)==FAILURE) {
zend_message_dispatcher(ZMSG_FAILED_HIGHLIGHT_FOPEN, filename
TSRMLS_CC);
+ zend_restore_lexical_state(&original_lex_state TSRMLS_CC);
return FAILURE;
}
zend_highlight(syntax_highlighter_ini TSRMLS_CC);
@@ -574,6 +565,7 @@
zval_copy_ctor(str);
zend_save_lexical_state(&original_lex_state TSRMLS_CC);
if (zend_prepare_string_for_scanning(str, str_name TSRMLS_CC)==FAILURE)
{
+ zend_restore_lexical_state(&original_lex_state TSRMLS_CC);
return FAILURE;
}
BEGIN(INITIAL);
http://cvs.php.net/viewvc.cgi/php-src/ext/tokenizer/tokenizer.c?r1=1.31.2.5.2.7.2.13&r2=1.31.2.5.2.7.2.14&diff_format=u
Index: php-src/ext/tokenizer/tokenizer.c
diff -u php-src/ext/tokenizer/tokenizer.c:1.31.2.5.2.7.2.13
php-src/ext/tokenizer/tokenizer.c:1.31.2.5.2.7.2.14
--- php-src/ext/tokenizer/tokenizer.c:1.31.2.5.2.7.2.13 Wed Dec 31 11:15:46 2008
+++ php-src/ext/tokenizer/tokenizer.c Wed Mar 25 15:23:17 2009
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: tokenizer.c,v 1.31.2.5.2.7.2.13 2008/12/31 11:15:46 sebastian Exp $ */
+/* $Id: tokenizer.c,v 1.31.2.5.2.7.2.14 2009/03/25 15:23:17 dmitry Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -171,6 +171,7 @@
zend_save_lexical_state(&original_lex_state TSRMLS_CC);
if (zend_prepare_string_for_scanning(&source_z, "" TSRMLS_CC) ==
FAILURE) {
+ zend_restore_lexical_state(&original_lex_state TSRMLS_CC);
RETURN_EMPTY_STRING();
}
@@ -178,10 +179,6 @@
tokenize(return_value TSRMLS_CC);
- while (!zend_stack_is_empty(&LANG_SCNG(state_stack))) {
- zend_stack_del_top(&LANG_SCNG(state_stack));
- }
-
zend_restore_lexical_state(&original_lex_state TSRMLS_CC);
zval_dtor(&source_z);
}
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php