From dc6d7befaa0de08814d4aaf85838faaf3fec8671 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Yaroslav=20de=20la=20Pe=C3=B1a=20Smirnov?=
 <yps@yaroslavps.com>
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 ++++++++---
 2 files changed, 11 insertions(+), 6 deletions(-)

(limited to 'src')

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);
-- 
cgit v1.2.3