On Tue, Feb 13, 2024 at 3:34 PM James Carter <jwcart2@xxxxxxxxx> wrote: > > On Mon, Jan 22, 2024 at 9:02 AM Christian Göttsche > <cgzones@xxxxxxxxxxxxxx> wrote: > > > > Close the input file and free all memory by the queue and lexer on a > > syntax or parse error. > > > > Signed-off-by: Christian Göttsche <cgzones@xxxxxxxxxxxxxx> > > Acked-by: James Carter <jwcart2@xxxxxxxxx> > Merged. Thanks, Jim > > --- > > checkpolicy/parse_util.c | 26 +++++++++++++++++++------- > > 1 file changed, 19 insertions(+), 7 deletions(-) > > > > diff --git a/checkpolicy/parse_util.c b/checkpolicy/parse_util.c > > index f2d1e04d..eda814e1 100644 > > --- a/checkpolicy/parse_util.c > > +++ b/checkpolicy/parse_util.c > > @@ -26,6 +26,7 @@ extern FILE *yyin; > > extern void init_parser(int); > > extern int yyparse(void); > > extern void yyrestart(FILE *); > > +extern int yylex_destroy(void); > > extern queue_t id_queue; > > extern unsigned int policydb_errors; > > extern policydb_t *policydbp; > > @@ -34,6 +35,8 @@ extern void set_source_file(const char *name); > > > > int read_source_policy(policydb_t * p, const char *file, const char *progname) > > { > > + int rc = -1; > > + > > yyin = fopen(file, "r"); > > if (!yyin) { > > fprintf(stderr, "%s: unable to open %s: %s\n", progname, file, strerror(errno)); > > @@ -41,21 +44,26 @@ int read_source_policy(policydb_t * p, const char *file, const char *progname) > > } > > set_source_file(file); > > > > - if ((id_queue = queue_create()) == NULL) { > > + id_queue = queue_create(); > > + if (id_queue == NULL) { > > fprintf(stderr, "%s: out of memory!\n", progname); > > - return -1; > > + goto cleanup; > > } > > > > + mlspol = p->mls; > > policydbp = p; > > policydbp->name = strdup(file); > > - mlspol = p->mls; > > + if (!policydbp->name) { > > + fprintf(stderr, "%s: out of memory!\n", progname); > > + goto cleanup; > > + } > > > > init_parser(1); > > if (yyparse() || policydb_errors) { > > fprintf(stderr, > > "%s: error(s) encountered while parsing configuration\n", > > progname); > > - return -1; > > + goto cleanup; > > } > > rewind(yyin); > > init_parser(2); > > @@ -65,11 +73,15 @@ int read_source_policy(policydb_t * p, const char *file, const char *progname) > > fprintf(stderr, > > "%s: error(s) encountered while parsing configuration\n", > > progname); > > - return -1; > > + goto cleanup; > > } > > - queue_destroy(id_queue); > > > > + rc = 0; > > + > > +cleanup: > > + queue_destroy(id_queue); > > fclose(yyin); > > + yylex_destroy(); > > > > - return 0; > > + return rc; > > } > > -- > > 2.43.0 > > > >