Browse Source

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 <jow@openwrt.org>
Jo-Philipp Wich 8 years ago
parent
commit
593e6c90b7
1 changed files with 6 additions and 1 deletions
  1. 6 1
      file.c

+ 6 - 1
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;