diff options
| author | Dan Goodliffe <dan.goodliffe@octal.co.uk> | 2026-07-02 15:46:25 +0100 |
|---|---|---|
| committer | Dan Goodliffe <dan.goodliffe@octal.co.uk> | 2026-07-02 15:46:25 +0100 |
| commit | fbb5038105e26e07d34184544ea4c70892acef92 (patch) | |
| tree | 1bd79bc9280b65116dd714f202718e9a5e8d091b /src/logTypes.cpp | |
| parent | 3cc7a1b1c0bf84ffcb149741c9ca2c60d9f00068 (diff) | |
| download | webstat-fbb5038105e26e07d34184544ea4c70892acef92.tar.bz2 webstat-fbb5038105e26e07d34184544ea4c70892acef92.tar.xz webstat-fbb5038105e26e07d34184544ea4c70892acef92.zip | |
Fixes to parseEscapedString
Fix the warnings picked up by the latest clang-tidy.
Add test cases lifted from the bad_lines log.
Add missing support for \b in escaping.
Diffstat (limited to 'src/logTypes.cpp')
| -rw-r--r-- | src/logTypes.cpp | 31 |
1 files changed, 16 insertions, 15 deletions
diff --git a/src/logTypes.cpp b/src/logTypes.cpp index d8b3a7e..25fc193 100644 --- a/src/logTypes.cpp +++ b/src/logTypes.cpp @@ -3,18 +3,19 @@ namespace { namespace { constexpr auto BS_MAP = []() { - std::array<char, 128> map {}; - map['f'] = '\f'; - map['n'] = '\n'; - map['r'] = '\r'; - map['t'] = '\t'; - map['v'] = '\v'; - map['"'] = '"'; - map['\\'] = '\\'; + std::array<char, 'v' + 1> map {}; + map.at('b') = '\b'; + map.at('f') = '\f'; + map.at('n') = '\n'; + map.at('r') = '\r'; + map.at('t') = '\t'; + map.at('v') = '\v'; + map.at('"') = '"'; + map.at('\\') = '\\'; return map; }(); - scn::scan_expected<typename scn::ContextType::iterator> + scn::scan_expected<scn::ContextType::iterator> parseEscapedString(std::string & value, scn::ContextType & ctx, const auto & start) { ctx.advance_to(start->begin()); @@ -30,8 +31,8 @@ namespace { value.append(1, static_cast<char>(hex->value())); ctx.advance_to(hex->begin()); } - else if (auto escaped = scn::scan<std::string>(ctx.range(), R"ESC(\{:.1[fnrtv"\]})ESC")) { - value.append(1, BS_MAP[static_cast<unsigned char>(escaped->value().front())]); + else if (auto escaped = scn::scan<std::string>(ctx.range(), R"ESC(\{:.1[bfnrtv"\]})ESC")) { + value.append(1, BS_MAP.at(static_cast<unsigned char>(escaped->value().front()))); ctx.advance_to(escaped->begin()); } else { @@ -44,7 +45,7 @@ namespace { } namespace scn { - scan_expected<typename ContextType::iterator> + scan_expected<ContextType::iterator> scanner<WebStat::QuotedString>::scan(WebStat::QuotedString & value, ContextType & ctx) { if (auto empty = scn::scan<>(ctx.range(), R"("")")) { @@ -63,7 +64,7 @@ namespace scn { return unexpected(simple.error()); } - scan_expected<typename ContextType::iterator> + scan_expected<ContextType::iterator> scanner<WebStat::QueryString>::scan(WebStat::QueryString & value, ContextType & ctx) { if (auto null = scn::scan<>(ctx.range(), R"("")")) { @@ -83,13 +84,13 @@ namespace scn { return unexpected(empty.error()); } - scan_expected<typename ContextType::iterator> + scan_expected<ContextType::iterator> scanner<WebStat::CLFString>::scan(WebStat::CLFString & value, ContextType & ctx) { if (auto null = scn::scan<>(ctx.range(), R"("-")")) { return null->begin(); } - return scn::scanner<WebStat::QuotedString> {}.scan(value.emplace(), ctx); + return scn::scanner<WebStat::QuotedString>::scan(value.emplace(), ctx); } } |
