From 0cc8517bcaa5c4f5208f81cfbde1f726ee441ed6 Mon Sep 17 00:00:00 2001 From: Jeff Becker Date: Fri, 3 May 2019 09:39:25 -0400 Subject: [PATCH] add error messages to ini parser and catch base cases. --- llarp/util/ini.cpp | 14 +++++++++++++- llarp/util/ini.hpp | 1 + test/util/test_llarp_util_ini.cpp | 5 +++++ 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/llarp/util/ini.cpp b/llarp/util/ini.cpp index 3a672d018..faade09a8 100644 --- a/llarp/util/ini.cpp +++ b/llarp/util/ini.cpp @@ -2,6 +2,7 @@ #include #include #include +#include namespace llarp { @@ -19,6 +20,7 @@ namespace llarp return false; f.read(m_Data.data(), m_Data.size()); } + m_FileName = fname; return Parse(); } @@ -27,6 +29,7 @@ namespace llarp { m_Data.resize(str.size()); std::copy(str.begin(), str.end(), m_Data.begin()); + m_FileName = ""; return Parse(); } @@ -63,9 +66,10 @@ namespace llarp } String_t sectName; - + size_t lineno = 0; for(const auto& line : lines) { + lineno ++; String_t realLine; auto comment = line.find_first_of(';'); if(comment == String_t::npos) @@ -116,11 +120,19 @@ namespace llarp // sect.k = v String_t k = realLine.substr(k_start, k_end - k_start); String_t v = realLine.substr(v_start, 1 + (v_end - v_start)); + if(k.size() == 0 || v.size() == 0) + { + LogError(m_FileName, " invalid line (", lineno,"): '", line, "'"); + return false; + } Section_t& sect = m_Config[sectName]; sect.emplace(k, v); } else // malformed? + { + LogError(m_FileName, " invalid line (", lineno,"): '", line, "'"); return false; + } } return true; } diff --git a/llarp/util/ini.hpp b/llarp/util/ini.hpp index c1488426a..4bd2a627b 100644 --- a/llarp/util/ini.hpp +++ b/llarp/util/ini.hpp @@ -47,6 +47,7 @@ namespace llarp std::vector< char > m_Data; Config_impl_t m_Config; + std::string m_FileName; }; } // namespace llarp diff --git a/test/util/test_llarp_util_ini.cpp b/test/util/test_llarp_util_ini.cpp index ff0373405..b3fa9947b 100644 --- a/test/util/test_llarp_util_ini.cpp +++ b/test/util/test_llarp_util_ini.cpp @@ -51,6 +51,11 @@ TEST_F(TestINIParser, TestParseSectionDuplicateKeys) ASSERT_EQ(num, size_t(2)); } +TEST_F(TestINIParser, TestNoKey) +{ + ASSERT_FALSE(parser.LoadString("[test]\n=1090\n")); +} + TEST_F(TestINIParser, TestParseInvalid) { ASSERT_FALSE(