From: Anton Moryakov <ant.v.morya...@gmail.com> Added free(t.val) for T_STRING case - Added free(t.val) in T_EOL and T_EOF cases - Added free(t.val) in default case - Added free(t.val) on error conditions - Prevents memory leaks from get_token() allocations
Signed-off-by: Anton Moryakov <ant.v.morya...@gmail.com> --- boot/pxe_utils.c | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/boot/pxe_utils.c b/boot/pxe_utils.c index 82f217aaf86..81b7602387b 100644 --- a/boot/pxe_utils.c +++ b/boot/pxe_utils.c @@ -1277,6 +1277,11 @@ static int parse_label(char **c, struct pxe_menu *cfg) break; case T_EOL: + free(t.val); + break; + + case T_STRING: + free(t.val); break; default: @@ -1285,12 +1290,15 @@ static int parse_label(char **c, struct pxe_menu *cfg) * of a label and whatever token this is, it's * something for the menu level context to handle. */ + free(t.val); *c = s; return 1; } - if (err < 0) + if (err < 0) { + free(t.val); return err; + } } } @@ -1383,19 +1391,28 @@ static int parse_pxefile_top(struct pxe_context *ctx, char *p, unsigned long bas break; case T_EOL: + free(t.val); break; case T_EOF: + free(t.val); return 1; + + case T_STRING: + free(t.val); + break; default: printf("Ignoring unknown command: %.*s\n", (int)(p - s), s); + free(t.val); eol_or_eof(&p); } - if (err < 0) + if (err < 0) { + free(t.val); return err; + } } } -- 2.30.2