xkbcomp: plug a potential memory leak

libxkbcommon-1.0.3/src/xkbcomp/ast-build.c:526: leaked_storage: Variable "file"
going out of scope leaks the storage it points to.

Where we exit the loop early, we don't release the various allocated memory.

Make this patch more obvious my moving the declaration for those into the loop
as well, this way we know that they aren't used outside the loop anywhere.

Found by coverity

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
master
Peter Hutterer 2021-03-18 12:22:34 +10:00 committed by Ran Benita
parent 01aa222257
commit 95e2907978
1 changed files with 8 additions and 3 deletions

View File

@ -462,15 +462,16 @@ IncludeStmt *
IncludeCreate(struct xkb_context *ctx, char *str, enum merge_mode merge) IncludeCreate(struct xkb_context *ctx, char *str, enum merge_mode merge)
{ {
IncludeStmt *incl, *first; IncludeStmt *incl, *first;
char *file, *map, *stmt, *tmp, *extra_data; char *stmt, *tmp;
char nextop; char nextop;
incl = first = NULL; incl = first = NULL;
file = map = NULL;
tmp = str; tmp = str;
stmt = strdup_safe(str); stmt = strdup_safe(str);
while (tmp && *tmp) while (tmp && *tmp)
{ {
char *file = NULL, *map = NULL, *extra_data = NULL;
if (!ParseIncludeMap(&tmp, &file, &map, &nextop, &extra_data)) if (!ParseIncludeMap(&tmp, &file, &map, &nextop, &extra_data))
goto err; goto err;
@ -494,8 +495,12 @@ IncludeCreate(struct xkb_context *ctx, char *str, enum merge_mode merge)
incl = incl->next_incl; incl = incl->next_incl;
} }
if (!incl) if (!incl) {
free(file);
free(map);
free(extra_data);
break; break;
}
incl->common.type = STMT_INCLUDE; incl->common.type = STMT_INCLUDE;
incl->common.next = NULL; incl->common.next = NULL;