mirror of
https://github.com/pantor/inja.git
synced 2026-05-19 02:35:23 +00:00
add check for too few arguments in operator parser
This commit is contained in:
@@ -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;
|
||||
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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") {
|
||||
|
||||
Reference in New Issue
Block a user