Unverified Commit 1e901ed8 authored by Joseph Noir's avatar Joseph Noir Committed by GitHub

Merge pull request #895

Fix infinite recursion in read_ini
parents e96daa80 7d426e0b
...@@ -308,7 +308,8 @@ void read_ini(state<Iterator, Sentinel>& ps, Consumer&& consumer) { ...@@ -308,7 +308,8 @@ void read_ini(state<Iterator, Sentinel>& ps, Consumer&& consumer) {
transition(init, " \t\n") transition(init, " \t\n")
fsm_epsilon(read_ini_comment(ps, consumer), init, ';') fsm_epsilon(read_ini_comment(ps, consumer), init, ';')
transition(start_section, '[') transition(start_section, '[')
fsm_epsilon_if(tmp == "global", read_ini_section(ps, begin_section()), return_to_global) fsm_epsilon_if(tmp == "global", read_ini_section(ps, begin_section()),
return_to_global, alnum)
} }
// Read the section key after reading an '['. // Read the section key after reading an '['.
state(start_section) { state(start_section) {
......
...@@ -106,7 +106,7 @@ log_type make_log(Ts&&... xs) { ...@@ -106,7 +106,7 @@ log_type make_log(Ts&&... xs) {
} }
// Tests basic functionality. // Tests basic functionality.
const char* ini0 = R"( const auto ini0 = R"(
[1group] [1group]
1value=321 1value=321
[_foo] [_foo]
...@@ -205,7 +205,7 @@ const auto ini0_log = make_log( ...@@ -205,7 +205,7 @@ const auto ini0_log = make_log(
// clang-format on // clang-format on
// Tests nested parameters. // Tests nested parameters.
const char* ini1 = R"( const auto ini1 = R"(
foo { foo {
bar = { bar = {
value1 = 1 value1 = 1
...@@ -242,6 +242,14 @@ const auto ini1_log = make_log( ...@@ -242,6 +242,14 @@ const auto ini1_log = make_log(
); );
// clang-format on // clang-format on
const auto ini2 = "#";
const auto ini2_log = make_log();
const auto ini3 = "; foobar\n!";
const auto ini3_log = make_log();
} // namespace <anonymous> } // namespace <anonymous>
CAF_TEST_FIXTURE_SCOPE(read_ini_tests, fixture) CAF_TEST_FIXTURE_SCOPE(read_ini_tests, fixture)
...@@ -264,4 +272,9 @@ CAF_TEST(section with valid key-value pairs) { ...@@ -264,4 +272,9 @@ CAF_TEST(section with valid key-value pairs) {
CAF_CHECK_EQUAL(parse(ini1), ini1_log); CAF_CHECK_EQUAL(parse(ini1), ini1_log);
} }
CAF_TEST(invalid inis) {
CAF_CHECK_EQUAL(parse(ini2), ini2_log);
CAF_CHECK_EQUAL(parse(ini3), ini3_log);
}
CAF_TEST_FIXTURE_SCOPE_END() CAF_TEST_FIXTURE_SCOPE_END()
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment