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