From: Jo-Philipp Wich Date: Thu, 5 Nov 2015 18:15:40 +0000 (+0100) Subject: file: raise parse error on conflicting section types in strict mode X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=593e6c90b7a443f77236adfa3372f65c94cfb253;p=oweals%2Fuci.git file: raise parse error on conflicting section types in strict mode If strict mode is enabled and we're parsing a config file with multiple sections of the same name but different types, then raise a parse error to notify the user that the subsequent section declaration would shadow all prior ones of the same name. The error would be triggered by a config like that: config typeA example option test 1 config typeB example option test 2 In such a case, libuci will raise this error: uci: Parse error (section of different type overwrites prior section with same name) at line 4, byte 23 Signed-off-by: Jo-Philipp Wich --- diff --git a/file.c b/file.c index 8e6052c..35755d8 100644 --- a/file.c +++ b/file.c @@ -437,8 +437,13 @@ static void uci_parse_config(struct uci_context *ctx) } else { uci_fill_ptr(ctx, &ptr, &pctx->package->e); e = uci_lookup_list(&pctx->package->sections, name); - if (e) + if (e) { ptr.s = uci_to_section(e); + + if ((ctx->flags & UCI_FLAG_STRICT) && strcmp(ptr.s->type, type)) + uci_parse_error(ctx, "section of different type overwrites prior section with same name"); + } + ptr.section = name; ptr.value = type;