diff --git a/dissect/cstruct/expression.py b/dissect/cstruct/expression.py index 774e376..1cc3c0a 100644 --- a/dissect/cstruct/expression.py +++ b/dissect/cstruct/expression.py @@ -299,4 +299,7 @@ def evaluate(self, context: dict[str, int] | None = None) -> int: self.evaluate_exp() + if len(self.queue) != 1: + raise ExpressionParserError("Invalid expression") + return self.queue[0] diff --git a/tests/test_expression.py b/tests/test_expression.py index 11f67e4..bad5fb5 100644 --- a/tests/test_expression.py +++ b/tests/test_expression.py @@ -94,6 +94,7 @@ def test_expression(expression: str, answer: int) -> None: ("-", ExpressionParserError, "Invalid expression: not enough operands"), ("(", ExpressionParserError, "Invalid expression"), (")", ExpressionParserError, "Invalid expression"), + (" ", ExpressionParserError, "Invalid expression"), ("()", ExpressionParserError, "Parser expected an expression, instead received empty parenthesis. Index: 1"), ("0()", ExpressionParserError, "Parser expected sizeof or an arethmethic operator instead got: '0'"), ("sizeof)", ExpressionParserError, "Invalid sizeof operation"),