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

Reply via email to