From e6ce5af8b6b95ec88881e47a2d614591defe39e8 Mon Sep 17 00:00:00 2001 From: obarun <eric@obarun.org> Date: Tue, 3 Sep 2019 17:10:56 +1100 Subject: [PATCH] fix bracket parsing --- src/lib66/parser_utils.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/lib66/parser_utils.c b/src/lib66/parser_utils.c index a90f7050..5c57d87e 100644 --- a/src/lib66/parser_utils.c +++ b/src/lib66/parser_utils.c @@ -104,11 +104,13 @@ void freed_parser(void) parse_mill_t MILL_FIRST_BRACKET = \ { \ .search = "(", .searchlen = 1, \ + .end = ")", .endlen = 1, \ .inner.debug = "first_bracket" } ; parse_mill_t MILL_GET_AROBASE_KEY = \ { \ .open = '@', .close = '=', .keepopen = 1, \ + .flush = 1, \ .forceclose = 1, .skip = " \t\r", .skiplen = 3, \ .forceskip = 1, .inner.debug = "get_arobase_key" } ; @@ -182,8 +184,9 @@ int section_get_range(section_t *sasection,stralloc *src) r = get_rlen_until(cp.s,'\n',pos-1) ;//-1 to retrieve the end of previous line if (r == -1) goto err ; if (!stralloc_catb(psasection,cp.s+start,(r - start))) goto err ; + } - else if (!stralloc_cats(psasection,cp.s+start)) goto err ; + else if (!stralloc_catb(psasection,cp.s+start,cp.len - start)) goto err ; if (!stralloc_0(psasection)) goto err ; } start = pos ; @@ -220,11 +223,13 @@ int key_get_range(genalloc *ga, section_t *sasection,int *svtype) nocheck.expected = KEYVAL ; nocheck.mandatory = OPTS ; section_setsa(i,&psasection,sasection) ; - if (!stralloc_cats(&nocheck.val,psasection->s+1)) goto err ; + if (!stralloc_cats(&nocheck.val,psasection->s+1)) goto err ;//+1 remove the first '\n' if (!environ_get_clean_env(&nocheck.val)) { VERBO3 strerr_warnwu2x("parse section: ",get_keybyid(i)) ; goto err ; } if (!stralloc_cats(&nocheck.val,"\n") || !stralloc_0(&nocheck.val)) goto err ; nocheck.val.len-- ; + + if (!genalloc_append(keynocheck,ga,&nocheck)) goto err ; } else @@ -266,8 +271,7 @@ int key_get_range(genalloc *ga, section_t *sasection,int *svtype) if (!stralloc_0(&nocheck.val)) goto err ; break ; case BRACKET: - r = parse_bracket(&nocheck.val,&pos) ; - if (r < 0) + if (!parse_bracket(&nocheck.val,&pos)) { VERBO3 parse_err(6,&nocheck) ; goto err ; @@ -680,6 +684,7 @@ int keep_common(sv_alltype *service,keynocheck *nocheck,int svtype) VERBO3 strerr_warnwu2x("clean environment value: ",chval) ; return 0 ; } + if (!stralloc_cats(&nocheck->val,"\n")) return 0 ; if (!stralloc_copy(&service->saenv,&nocheck->val)) { VERBO3 strerr_warnwu2x("store environment value: ",chval) ; -- GitLab