From aca4d4963a65e49614ed8cd52836a2619775c1f6 Mon Sep 17 00:00:00 2001 From: xinpeng wang Date: Tue, 14 Sep 2021 13:09:20 +0800 Subject: [PATCH] Fix handling of complex configuration lines with mixed "" and # MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The original code wants to remove # comments unless they are within a double quoted string, but it doesn’t consider the "" after #, for example in the following line: a=b #"a=c" Signed-off-by: xinpeng wang --- src/utils/config.c | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/src/utils/config.c b/src/utils/config.c index 22aa2216e..ba26c2c9a 100644 --- a/src/utils/config.c +++ b/src/utils/config.c @@ -66,12 +66,20 @@ char * wpa_config_get_line(char *s, int size, FILE *stream, int *line, * Remove # comments unless they are within a double quoted * string. */ - sstart = os_strchr(pos, '"'); - if (sstart) - sstart = os_strrchr(sstart + 1, '"'); - if (!sstart) - sstart = pos; + sstart = pos; end = os_strchr(sstart, '#'); + while (end) { + sstart = os_strchr(sstart, '"'); + if (!sstart || sstart > end) + break; + sstart = os_strchr(sstart + 1, '"'); + if (!sstart) + break; + sstart++; + if (sstart > end) + end = os_strchr(sstart, '#'); + } + if (end) *end-- = '\0'; else