dmitry Wed Mar 25 15:24:28 2009 UTC Modified files: /ZendEngine2 zend_globals.h zend_language_scanner.l /php-src/ext/tokenizer tokenizer.c /php-src/ext/standard basic_functions.c Log: Fixed bug #47038 (Memory leak in include) http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_globals.h?r1=1.185&r2=1.186&diff_format=u Index: ZendEngine2/zend_globals.h diff -u ZendEngine2/zend_globals.h:1.185 ZendEngine2/zend_globals.h:1.186 --- ZendEngine2/zend_globals.h:1.185 Wed Mar 18 10:49:35 2009 +++ ZendEngine2/zend_globals.h Wed Mar 25 15:24:27 2009 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_globals.h,v 1.185 2009/03/18 10:49:35 dmitry Exp $ */ +/* $Id: zend_globals.h,v 1.186 2009/03/25 15:24:27 dmitry Exp $ */ #ifndef ZEND_GLOBALS_H #define ZEND_GLOBALS_H @@ -279,8 +279,6 @@ int yy_state; zend_stack state_stack; - zend_llist used_state_stacks; - UConverter *input_conv; /* converter for flex input */ UConverter *output_conv; /* converter for data from flex output */ zend_bool encoding_checked; http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_language_scanner.l?r1=1.202&r2=1.203&diff_format=u Index: ZendEngine2/zend_language_scanner.l diff -u ZendEngine2/zend_language_scanner.l:1.202 ZendEngine2/zend_language_scanner.l:1.203 --- ZendEngine2/zend_language_scanner.l:1.202 Mon Mar 16 01:40:01 2009 +++ ZendEngine2/zend_language_scanner.l Wed Mar 25 15:24:27 2009 @@ -21,7 +21,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_language_scanner.l,v 1.202 2009/03/16 01:40:01 shire Exp $ */ +/* $Id: zend_language_scanner.l,v 1.203 2009/03/25 15:24:27 dmitry Exp $ */ #if 0 # define YYDEBUG(s, c) printf("state: %d char: %c\n", s, c) @@ -156,9 +156,7 @@ SCNG(rest_str) = NULL; SCNG(rest_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)); } @@ -168,7 +166,7 @@ efree(CG(heredoc)); CG(heredoc_len)=0; } - zend_llist_destroy(&SCNG(used_state_stacks)); + zend_stack_destroy(&SCNG(state_stack)); RESET_DOC_COMMENT(); if (SCNG(input_conv)) { @@ -187,11 +185,6 @@ SCNG(rest_len) = 0; } -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); @@ -203,7 +196,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; @@ -231,7 +223,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; @@ -780,9 +772,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; } @@ -891,6 +881,7 @@ zend_save_lexical_state(&original_lex_state TSRMLS_CC); if (zend_prepare_string_for_scanning(source_string, filename TSRMLS_CC)==FAILURE) { + zend_restore_lexical_state(&original_lex_state TSRMLS_CC); efree(op_array); retval = NULL; } else { @@ -934,6 +925,7 @@ file_handle.opened_path = NULL; zend_save_lexical_state(&original_lex_state TSRMLS_CC); if (open_file_for_scanning(&file_handle TSRMLS_CC)==FAILURE) { + zend_restore_lexical_state(&original_lex_state TSRMLS_CC); zend_message_dispatcher(ZMSG_FAILED_HIGHLIGHT_FOPEN, filename TSRMLS_CC); return FAILURE; } @@ -952,6 +944,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.56&r2=1.57&diff_format=u Index: php-src/ext/tokenizer/tokenizer.c diff -u php-src/ext/tokenizer/tokenizer.c:1.56 php-src/ext/tokenizer/tokenizer.c:1.57 --- php-src/ext/tokenizer/tokenizer.c:1.56 Tue Mar 10 23:39:51 2009 +++ php-src/ext/tokenizer/tokenizer.c Wed Mar 25 15:24:27 2009 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: tokenizer.c,v 1.56 2009/03/10 23:39:51 helly Exp $ */ +/* $Id: tokenizer.c,v 1.57 2009/03/25 15:24:27 dmitry Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" @@ -173,6 +173,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(); } @@ -180,10 +181,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); } http://cvs.php.net/viewvc.cgi/php-src/ext/standard/basic_functions.c?r1=1.950&r2=1.951&diff_format=u Index: php-src/ext/standard/basic_functions.c diff -u php-src/ext/standard/basic_functions.c:1.950 php-src/ext/standard/basic_functions.c:1.951 --- php-src/ext/standard/basic_functions.c:1.950 Tue Mar 10 23:39:39 2009 +++ php-src/ext/standard/basic_functions.c Wed Mar 25 15:24:28 2009 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: basic_functions.c,v 1.950 2009/03/10 23:39:39 helly Exp $ */ +/* $Id: basic_functions.c,v 1.951 2009/03/25 15:24:28 dmitry Exp $ */ #include "php.h" #include "php_streams.h" @@ -5169,6 +5169,7 @@ file_handle.opened_path = NULL; zend_save_lexical_state(&original_lex_state TSRMLS_CC); if (open_file_for_scanning(&file_handle TSRMLS_CC) == FAILURE) { + zend_restore_lexical_state(&original_lex_state TSRMLS_CC); php_output_end(TSRMLS_C); if (filename_type == IS_UNICODE) { efree(filename);
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php