add check for too few arguments in operator parser

This commit is contained in:
pantor
2022-07-10 13:46:33 +02:00
parent 72f90122a2
commit 9f923b3677
4 changed files with 12 additions and 3 deletions
+1 -1
View File
@@ -143,7 +143,7 @@ public:
Op operation;
std::string name;
int number_args; // Should also be negative -> -1 for unknown number
int number_args; // Can also be negative -> -1 for unknown number
std::vector<std::shared_ptr<ExpressionNode>> arguments;
CallbackFunction callback;
+4
View File
@@ -76,6 +76,10 @@ class Parser {
auto function = operator_stack.top();
operator_stack.pop();
if (static_cast<int>(arguments.size()) < function->number_args) {
throw_parser_error("too few arguments");
}
for (int i = 0; i < function->number_args; ++i) {
function->arguments.insert(function->arguments.begin(), arguments.back());
arguments.pop_back();
+5 -1
View File
@@ -483,7 +483,7 @@ public:
Op operation;
std::string name;
int number_args; // Should also be negative -> -1 for unknown number
int number_args; // Can also be negative -> -1 for unknown number
std::vector<std::shared_ptr<ExpressionNode>> arguments;
CallbackFunction callback;
@@ -1490,6 +1490,10 @@ class Parser {
auto function = operator_stack.top();
operator_stack.pop();
if (static_cast<int>(arguments.size()) < function->number_args) {
throw_parser_error("too few arguments");
}
for (int i = 0; i < function->number_args; ++i) {
function->arguments.insert(function->arguments.begin(), arguments.back());
arguments.pop_back();
+2 -1
View File
@@ -35,7 +35,8 @@ TEST_CASE("functions") {
CHECK(env.render("{{ 5^3 }}", data) == "125");
CHECK(env.render("{{ 5 + 12 + 4 * (4 - (1 + 1))^2 - 75 * 1 }}", data) == "-42");
// CHECK_THROWS_WITH(env.render("{{ +1 }}", data), "[inja.exception.render_error] (at 1:4) empty expression");
CHECK_THROWS_WITH(env.render("{{ +1 }}", data), "[inja.exception.parser_error] (at 1:7) too few arguments");
CHECK_THROWS_WITH(env.render("{{ 1 + }}", data), "[inja.exception.parser_error] (at 1:8) too few arguments");
}
SUBCASE("upper") {