From b66b2f3b4372be8fcad8bb0d6af74cf5a107f1f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9E=D0=BD=D0=BE=D1=84=D1=80=D0=B5=D0=B9=20=D0=91=D0=BE?= =?UTF-8?q?=D1=80=D0=B8=D1=81?= Date: Sun, 27 Jun 2021 19:59:26 +0300 Subject: [PATCH 1/3] Fix parsing escaped quotes in config --- sources/parser.h | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/sources/parser.h b/sources/parser.h index 9d2f26b4..fa313380 100644 --- a/sources/parser.h +++ b/sources/parser.h @@ -146,7 +146,10 @@ static inline int od_parser_next(od_parser_t *parser, od_token_t *token) token->type = OD_PARSER_ERROR; return token->type; } - parser->pos++; + if (*parser->pos == '\\') + parser->pos += 2; + else + parser->pos++; } if (od_unlikely(parser->pos == parser->end)) { token->type = OD_PARSER_ERROR; From b4d84db3f271eaf7c444f44a6714173ca41504c9 Mon Sep 17 00:00:00 2001 From: Andrey Borodin Date: Tue, 29 Jun 2021 11:13:06 +0500 Subject: [PATCH 2/3] Protect escaping from overrun --- sources/parser.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sources/parser.h b/sources/parser.h index fa313380..4546677c 100644 --- a/sources/parser.h +++ b/sources/parser.h @@ -146,7 +146,7 @@ static inline int od_parser_next(od_parser_t *parser, od_token_t *token) token->type = OD_PARSER_ERROR; return token->type; } - if (*parser->pos == '\\') + if ((*parser->pos == '\\') && (parser->pos + 1 != parser->end)) parser->pos += 2; else parser->pos++; From a351c107c877b57548de64432656489a4ede4483 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9E=D0=BD=D0=BE=D1=84=D1=80=D0=B5=D0=B9=20=D0=91=D0=BE?= =?UTF-8?q?=D1=80=D0=B8=D1=81?= Date: Tue, 29 Jun 2021 10:32:36 +0300 Subject: [PATCH 3/3] Fix clang format error --- sources/parser.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sources/parser.h b/sources/parser.h index 4546677c..fe86bc5a 100644 --- a/sources/parser.h +++ b/sources/parser.h @@ -146,7 +146,8 @@ static inline int od_parser_next(od_parser_t *parser, od_token_t *token) token->type = OD_PARSER_ERROR; return token->type; } - if ((*parser->pos == '\\') && (parser->pos + 1 != parser->end)) + if ((*parser->pos == '\\') && + (parser->pos + 1 != parser->end)) parser->pos += 2; else parser->pos++;