From: Petr Štetiar Date: Mon, 4 Nov 2019 23:43:46 +0000 (+0100) Subject: ucimap: fix possible use of memory after it is freed X-Git-Url: http://git.openwrt.org/?a=commitdiff_plain;h=a2cab3b088a29b885e33b923edb062badfb92346;p=project%2Fuci.git ucimap: fix possible use of memory after it is freed scan-build from clang version 9 has reported following issue: ucimap.c:710:8: warning: Use of memory after it is freed err = ucimap_parse_options(map, sm, sd, s); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Signed-off-by: Petr Štetiar --- diff --git a/ucimap.c b/ucimap.c index d5fd5c4..7c2b043 100644 --- a/ucimap.c +++ b/ucimap.c @@ -490,16 +490,21 @@ ucimap_add_section_list(struct uci_map *map, struct ucimap_section_data *sd) map->sdata_tail = &sd->next; } -static void +static int ucimap_add_section(struct ucimap_section_data *sd) { + int r; struct uci_map *map = sd->map; sd->next = NULL; - if (sd->sm->add(map, ucimap_section_ptr(sd)) < 0) + r = sd->sm->add(map, ucimap_section_ptr(sd)); + if (r < 0) { ucimap_free_section(map, sd); - else + return r; + } else ucimap_add_section_list(map, sd); + + return 0; } #ifdef UCI_DEBUG @@ -702,7 +707,9 @@ ucimap_parse_section(struct uci_map *map, struct uci_sectionmap *sm, struct ucim goto error; if (map->parsed) { - ucimap_add_section(sd); + err = ucimap_add_section(sd); + if (err) + return err; } else { ucimap_add_section_list(map, sd); }