diff --git a/include/inja/parser.hpp b/include/inja/parser.hpp index 8882dfe..5074e93 100644 --- a/include/inja/parser.hpp +++ b/include/inja/parser.hpp @@ -360,6 +360,9 @@ class Parser { } auto func = std::make_shared(tok.text, tok.text.data() - tmpl.content.c_str()); // add first parameter as last value from arguments + if (arguments.empty()) { + throw_parser_error("too few arguments"); + } func->number_args += 1; func->arguments.emplace_back(arguments.back()); arguments.pop_back(); diff --git a/single_include/inja/inja.hpp b/single_include/inja/inja.hpp index 1a36521..f2c3cdd 100644 --- a/single_include/inja/inja.hpp +++ b/single_include/inja/inja.hpp @@ -1816,6 +1816,9 @@ class Parser { } auto func = std::make_shared(tok.text, tok.text.data() - tmpl.content.c_str()); // add first parameter as last value from arguments + if (arguments.empty()) { + throw_parser_error("too few arguments"); + } func->number_args += 1; func->arguments.emplace_back(arguments.back()); arguments.pop_back(); diff --git a/test/test-renderer.cpp b/test/test-renderer.cpp index af0f35e..98e0a23 100644 --- a/test/test-renderer.cpp +++ b/test/test-renderer.cpp @@ -159,6 +159,9 @@ Yeah! CHECK(env.render("{{ brother.name | upper }}", data) == "CHRIS"); CHECK(env.render("{{ brother.name | upper | lower }}", data) == "chris"); CHECK(env.render("{{ [\"C\", \"A\", \"B\"] | sort | join(\",\") }}", data) == "A,B,C"); + + CHECK_THROWS_WITH(env.render("{{ | upper }}", data), "[inja.exception.parser_error] (at 1:6) too few arguments"); + CHECK_THROWS_WITH(env.render("{{ upper(| lower) }}", data), "[inja.exception.parser_error] (at 1:12) too few arguments"); } }