From 900d06b6072263ecefbb5a21b219a39fe711a2c0 Mon Sep 17 00:00:00 2001 From: Vsevolod Stakhov Date: Mon, 6 Nov 2017 22:18:57 +0000 Subject: [PATCH] [Fix] Fix merging of the implicit arrays --- contrib/libucl/ucl_parser.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/contrib/libucl/ucl_parser.c b/contrib/libucl/ucl_parser.c index 11b871259..088813918 100644 --- a/contrib/libucl/ucl_parser.c +++ b/contrib/libucl/ucl_parser.c @@ -1067,12 +1067,20 @@ bool ucl_parser_process_object_element (struct ucl_parser *parser, ucl_object_t *nobj) { ucl_hash_t *container; - ucl_object_t *tobj; + ucl_object_t *tobj = NULL, *cur; char errmsg[256]; container = parser->stack->obj->value.ov; - tobj = __DECONST (ucl_object_t *, ucl_hash_search_obj (container, nobj)); + DL_FOREACH (parser->stack->obj, cur) { + tobj = __DECONST (ucl_object_t *, ucl_hash_search_obj (cur->value.ov, nobj)); + + if (tobj != NULL) { + break; + } + } + + if (tobj == NULL) { container = ucl_hash_insert_object (container, nobj, parser->flags & UCL_PARSER_KEY_LOWERCASE); @@ -1094,8 +1102,6 @@ ucl_parser_process_object_element (struct ucl_parser *parser, ucl_object_t *nobj * - if a new object has bigger priority, then we overwrite an old one * - if a new object has lower priority, then we ignore it */ - - /* Special case for inherited objects */ if (tobj->flags & UCL_OBJECT_INHERITED) { prinew = priold + 1; -- 2.39.5