X-Git-Url: http://git.openwrt.org/?p=project%2Fuci.git;a=blobdiff_plain;f=ucimap.c;h=b4f9518f5b5af5a4d7d294389b650d6576f71a4d;hp=6a5c11721bbc79e192d22785e8ce1c7997bdc342;hb=13d32e6df1c3949459c8821b7a03ec13d92e9bf1;hpb=ef95525edc1ade7e729187b011de889b8f5f57c6 diff --git a/ucimap.c b/ucimap.c index 6a5c117..b4f9518 100644 --- a/ucimap.c +++ b/ucimap.c @@ -13,7 +13,7 @@ */ /* - * This file contains ucimap, an API for mapping UCI to C data structures + * This file contains ucimap, an API for mapping UCI to C data structures */ #include @@ -295,6 +295,9 @@ realloc: offset = (items - (*list)->size) * sizeof(union ucimap_data); a->ptr = realloc(a->ptr, size); + if (!a->ptr) + return -ENOMEM; + if (offset) memset((char *) a->ptr + offset, 0, size - offset); new = a->ptr; @@ -311,6 +314,7 @@ ucimap_add_fixup(struct ucimap_section_data *sd, union ucimap_data *data, struct struct ucimap_fixup *f, tmp; struct uci_map *map = sd->map; + tmp.next = NULL; tmp.sm = om->data.sm; tmp.name = str; tmp.type = om->type; @@ -709,8 +713,8 @@ ucimap_parse_section(struct uci_map *map, struct uci_sectionmap *sm, struct ucim return 0; error_mem: - if (sd->allocmap) - free(sd->allocmap); + free(sd->alloc_custom); + free(sd->allocmap); free(sd); return UCI_ERR_MEM;