fixed flex parser memory leaks in ipsec starter

This commit is contained in:
Andreas Steffen
2010-05-02 11:40:46 +02:00
parent 2724ae521e
commit 34f92dcfba
2 changed files with 10 additions and 10 deletions
+3 -1
View File
@@ -24,7 +24,8 @@
#define MAX_INCLUDE_DEPTH 20 #define MAX_INCLUDE_DEPTH 20
extern void yyerror(const char *); extern void yyerror(const char *);
extern int yylex (void); extern int yylex(void);
extern int yylex_destroy(void);
static struct { static struct {
int stack_ptr; int stack_ptr;
@@ -68,6 +69,7 @@ void _parser_y_fini (void)
fclose(__parser_y_private.file[i]); fclose(__parser_y_private.file[i]);
} }
memset(&__parser_y_private, 0, sizeof(__parser_y_private)); memset(&__parser_y_private, 0, sizeof(__parser_y_private));
yylex_destroy();
} }
int _parser_y_include (const char *filename) int _parser_y_include (const char *filename)
+7 -9
View File
@@ -156,21 +156,20 @@ statement_kw:
%% %%
void void yyerror(const char *s)
yyerror(const char *s)
{ {
if (_save_errors_) if (_save_errors_)
_parser_y_error(parser_errstring, ERRSTRING_LEN, s); _parser_y_error(parser_errstring, ERRSTRING_LEN, s);
} }
config_parsed_t * config_parsed_t *parser_load_conf(const char *file)
parser_load_conf(const char *file)
{ {
config_parsed_t *cfg = NULL; config_parsed_t *cfg = NULL;
int err = 0; int err = 0;
FILE *f; 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; extern FILE *yyin;
memset(parser_errstring, 0, ERRSTRING_LEN+1); memset(parser_errstring, 0, ERRSTRING_LEN+1);
@@ -231,11 +230,11 @@ parser_load_conf(const char *file)
cfg = NULL; cfg = NULL;
} }
_parser_y_fini();
return cfg; return cfg;
} }
static void static void parser_free_kwlist(kw_list_t *list)
parser_free_kwlist(kw_list_t *list)
{ {
kw_list_t *elt; kw_list_t *elt;
@@ -248,8 +247,7 @@ parser_free_kwlist(kw_list_t *list)
} }
} }
void void parser_free_conf(config_parsed_t *cfg)
parser_free_conf(config_parsed_t *cfg)
{ {
section_list_t *sec; section_list_t *sec;
if (cfg) if (cfg)