From dc6d7befaa0de08814d4aaf85838faaf3fec8671 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yaroslav=20de=20la=20Pe=C3=B1a=20Smirnov?= Date: Wed, 22 Sep 2021 19:49:33 +0300 Subject: Fix parcini treating one key characters as errors --- src/parcini.c | 6 +++--- src/tests/parcini.c | 11 ++++++++--- test.ini | 3 ++- 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/src/parcini.c b/src/parcini.c index 7fa8247..8434685 100644 --- a/src/parcini.c +++ b/src/parcini.c @@ -144,6 +144,9 @@ parcini_parse_next_line(parcini_t *parser, struct parcini_line *parsed) parsed->section = parser->last_section; char *delim = strchr(start, '='); + if (start == delim) { + return PARCINI_KEY_PARSE_ERROR; + } if (delim) { char *cmnt = strchr(start, PARCINI_COMMENT_CHAR); if (cmnt && cmnt < delim) { @@ -153,9 +156,6 @@ parcini_parse_next_line(parcini_t *parser, struct parcini_line *parsed) *end = '\0'; end -= 1; rstrip(start, &end); - if (start == end) { - return PARCINI_KEY_PARSE_ERROR; - } parsed->key = start; start = delim + 1; diff --git a/src/tests/parcini.c b/src/tests/parcini.c index f53ab09..90d5997 100644 --- a/src/tests/parcini.c +++ b/src/tests/parcini.c @@ -35,7 +35,7 @@ test_parcini_parse_file(void) asserteq(res, PARCINI_KEYVALUE); asserteq(line.lineno, 3); asserteq(strcmp(line.section, ""), 0); - asserteq(strcmp(line.key, "key3"), 0); + asserteq(strcmp(line.key, "3"), 0); asserteq(line.value.type, PARCINI_VALUE_BOOLEAN); asserteq(line.value.value.boolean, false); @@ -115,14 +115,19 @@ test_parcini_parse_file(void) /* line 15 */ res = parcini_parse_next_line(parser, &line); - asserteq(res, PARCINI_EMPTY_LINE); + asserteq(res, PARCINI_KEY_PARSE_ERROR); asserteq(line.lineno, 15); /* line 16 */ res = parcini_parse_next_line(parser, &line); - asserteq(res, PARCINI_SECTION_PARSE_ERROR); + asserteq(res, PARCINI_EMPTY_LINE); asserteq(line.lineno, 16); + /* line 17 */ + res = parcini_parse_next_line(parser, &line); + asserteq(res, PARCINI_SECTION_PARSE_ERROR); + asserteq(line.lineno, 17); + /* EOF */ res = parcini_parse_next_line(parser, &line); asserteq(res, PARCINI_EOF); diff --git a/test.ini b/test.ini index f8823b6..6f16ce0 100644 --- a/test.ini +++ b/test.ini @@ -1,6 +1,6 @@ key1 = "string" key2= -1520 -key3=no +3=no #test one character keys # this is a comment [asection] @@ -12,5 +12,6 @@ range=3000000000000000000000 #this should be enough bool2=yes bool3=false bool3 = true +=false #another bad key [bad section -- cgit v1.2.3