From 2e4c7fb95e1a8a37d94885d01a18d7e8d95b3a8a Mon Sep 17 00:00:00 2001 From: ToruNiina Date: Fri, 10 Dec 2021 23:39:54 +0900 Subject: [PATCH] fix: line-feed is not required at the EOF --- toml/parser.hpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/toml/parser.hpp b/toml/parser.hpp index 7636f14..a060114 100644 --- a/toml/parser.hpp +++ b/toml/parser.hpp @@ -2209,12 +2209,24 @@ parse(std::istream& is, const std::string& fname = "unknown file") std::vector letters(static_cast(fsize)); is.read(letters.data(), fsize); + // remove null character if exists while(!letters.empty() && letters.back() == '\0') { letters.pop_back(); } assert(letters.empty() || letters.back() != '\0'); + // append LF. + // Although TOML does not require LF at the EOF, to make parsing logic + // simpler, we "normalize" the content by adding LF if it does not exist. + // It also checks if the last char is CR, to avoid changing the meaning. + // This is not the *best* way to deal with the last character, but is a + // simple and quick fix. + if(!letters.empty() && letters.back() != '\n' && letters.back() != '\r') + { + letters.push_back('\n'); + } + detail::location loc(std::move(fname), std::move(letters)); // skip BOM if exists.