From 9667b814387cdbec832dd45fd767d0d134e90194 Mon Sep 17 00:00:00 2001 From: MihailRis Date: Sun, 13 Oct 2024 10:16:17 +0300 Subject: [PATCH] fix: string literal line separator escape --- src/coders/commons.cpp | 2 +- src/coders/toml.cpp | 4 +++- test/coders/toml.cpp | 3 ++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/coders/commons.cpp b/src/coders/commons.cpp index 5c05626b..b79dc14e 100644 --- a/src/coders/commons.cpp +++ b/src/coders/commons.cpp @@ -370,7 +370,7 @@ std::string BasicParser::parseString(char quote, bool closeRequired) { case '"': ss << '"'; break; case '\\': ss << '\\'; break; case '/': ss << '/'; break; - case '\n': pos++; continue; + case '\n': continue; default: throw error( "'\\" + std::string({c}) + "' is an illegal escape" diff --git a/src/coders/toml.cpp b/src/coders/toml.cpp index 08e65720..b41269e8 100644 --- a/src/coders/toml.cpp +++ b/src/coders/toml.cpp @@ -26,6 +26,8 @@ class TomlReader : BasicParser { } } + // modified version of BaseParser.parseString + // todo: extract common part std::string parseMultilineString() { pos += 2; char next = peek(); @@ -57,7 +59,7 @@ class TomlReader : BasicParser { case '"': ss << '"'; break; case '\\': ss << '\\'; break; case '/': ss << '/'; break; - case '\n': pos++; continue; + case '\n': continue; default: throw error( "'\\" + std::string({c}) + "' is an illegal escape" diff --git a/test/coders/toml.cpp b/test/coders/toml.cpp index f9c189db..a45e5286 100644 --- a/test/coders/toml.cpp +++ b/test/coders/toml.cpp @@ -73,7 +73,8 @@ inline std::string SRC_EXAMPLE = "\n" "[servers.beta]\n" "ip = \"10.0.0.2\"\n" - "role = \"\"\"backend\"\"\""; + "role = \"\"\"back\\\n" + "end\"\"\""; TEST(TOML, ExampleCode) { try {