From b141129bda39ffa72610ea54cce60b589c217c44 Mon Sep 17 00:00:00 2001 From: pantor Date: Tue, 4 Aug 2020 23:19:55 +0200 Subject: [PATCH] fix segmentation fault --- include/inja/parser.hpp | 6 +++--- single_include/inja/inja.hpp | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/include/inja/parser.hpp b/include/inja/parser.hpp index 23d869c..348f315 100644 --- a/include/inja/parser.hpp +++ b/include/inja/parser.hpp @@ -139,7 +139,7 @@ class Parser { add_json_literal(tmpl.content.c_str()); } - // Operator + // Operator } else if (tok.text == "and" || tok.text == "or" || tok.text == "in" || tok.text == "not") { goto parse_operator; @@ -268,12 +268,12 @@ class Parser { } break; case Token::Kind::RightParen: { current_paren_level -= 1; - while (operator_stack.top()->operation != FunctionStorage::Operation::ParenLeft) { + while (!operator_stack.empty() && operator_stack.top()->operation != FunctionStorage::Operation::ParenLeft) { current_expression_list->rpn_output.emplace_back(operator_stack.top()); operator_stack.pop(); } - if (operator_stack.top()->operation == FunctionStorage::Operation::ParenLeft) { + if (!operator_stack.empty() && operator_stack.top()->operation == FunctionStorage::Operation::ParenLeft) { operator_stack.pop(); } diff --git a/single_include/inja/inja.hpp b/single_include/inja/inja.hpp index 6a59abd..ec9937d 100644 --- a/single_include/inja/inja.hpp +++ b/single_include/inja/inja.hpp @@ -2851,7 +2851,7 @@ class Parser { add_json_literal(tmpl.content.c_str()); } - // Operator + // Operator } else if (tok.text == "and" || tok.text == "or" || tok.text == "in" || tok.text == "not") { goto parse_operator; @@ -2980,12 +2980,12 @@ class Parser { } break; case Token::Kind::RightParen: { current_paren_level -= 1; - while (operator_stack.top()->operation != FunctionStorage::Operation::ParenLeft) { + while (!operator_stack.empty() && operator_stack.top()->operation != FunctionStorage::Operation::ParenLeft) { current_expression_list->rpn_output.emplace_back(operator_stack.top()); operator_stack.pop(); } - if (operator_stack.top()->operation == FunctionStorage::Operation::ParenLeft) { + if (!operator_stack.empty() && operator_stack.top()->operation == FunctionStorage::Operation::ParenLeft) { operator_stack.pop(); }