fixed flex parser memory leaks in ipsec starter
authorAndreas Steffen <andreas.steffen@strongswan.org>
Sun, 2 May 2010 09:40:46 +0000 (11:40 +0200)
committerAndreas Steffen <andreas.steffen@strongswan.org>
Sun, 2 May 2010 09:40:46 +0000 (11:40 +0200)
src/starter/parser.l
src/starter/parser.y

index 5857c08..c45847c 100644 (file)
@@ -24,7 +24,8 @@
 #define MAX_INCLUDE_DEPTH  20
 
 extern void yyerror(const char *);
-extern int yylex (void);
+extern int yylex(void);
+extern int yylex_destroy(void);
 
 static struct {
        int stack_ptr;
@@ -68,6 +69,7 @@ void _parser_y_fini (void)
                        fclose(__parser_y_private.file[i]);
        }
        memset(&__parser_y_private, 0, sizeof(__parser_y_private));
+       yylex_destroy();
 }
 
 int _parser_y_include (const char *filename)
index 4533228..b0b1f6f 100644 (file)
@@ -156,21 +156,20 @@ statement_kw:
 
 %%
 
-void
-yyerror(const char *s)
+void yyerror(const char *s)
 {
        if (_save_errors_)
                _parser_y_error(parser_errstring, ERRSTRING_LEN, s);
 }
 
-config_parsed_t *
-parser_load_conf(const char *file)
+config_parsed_t *parser_load_conf(const char *file)
 {
        config_parsed_t *cfg = NULL;
        int err = 0;
        FILE *f;
 
-       extern void _parser_y_init (const char *f);
+       extern void _parser_y_init(const char *f);
+       extern void _parser_y_fini(void);
        extern FILE *yyin;
 
        memset(parser_errstring, 0, ERRSTRING_LEN+1);
@@ -231,11 +230,11 @@ parser_load_conf(const char *file)
                cfg = NULL;
        }
 
+       _parser_y_fini();
        return cfg;
 }
 
-static void
-parser_free_kwlist(kw_list_t *list)
+static void parser_free_kwlist(kw_list_t *list)
 {
        kw_list_t *elt;
 
@@ -248,8 +247,7 @@ parser_free_kwlist(kw_list_t *list)
        }
 }
 
-void
-parser_free_conf(config_parsed_t *cfg)
+void parser_free_conf(config_parsed_t *cfg)
 {
        section_list_t *sec;
        if (cfg)