Eval
- Added range checking to the while loop for the parser, to prevent runnig over, which caused some of the problems with segfaults on Debian & Ubuntu.
This commit is contained in:
24
src/Eval.cpp
24
src/Eval.cpp
@@ -416,7 +416,8 @@ bool Eval::parseLogical (
|
|||||||
if (i < infix.size () &&
|
if (i < infix.size () &&
|
||||||
parseRegex (infix, i))
|
parseRegex (infix, i))
|
||||||
{
|
{
|
||||||
while ((infix[i].first == "and" ||
|
while (i < infix.size () &&
|
||||||
|
(infix[i].first == "and" ||
|
||||||
infix[i].first == "or" ||
|
infix[i].first == "or" ||
|
||||||
infix[i].first == "xor") &&
|
infix[i].first == "xor") &&
|
||||||
infix[i].second == Lexer::typeOperator)
|
infix[i].second == Lexer::typeOperator)
|
||||||
@@ -447,7 +448,8 @@ bool Eval::parseRegex (
|
|||||||
if (i < infix.size () &&
|
if (i < infix.size () &&
|
||||||
parseEquality (infix, i))
|
parseEquality (infix, i))
|
||||||
{
|
{
|
||||||
while ((infix[i].first == "~" ||
|
while (i < infix.size () &&
|
||||||
|
(infix[i].first == "~" ||
|
||||||
infix[i].first == "!~") &&
|
infix[i].first == "!~") &&
|
||||||
infix[i].second == Lexer::typeOperator)
|
infix[i].second == Lexer::typeOperator)
|
||||||
{
|
{
|
||||||
@@ -477,7 +479,8 @@ bool Eval::parseEquality (
|
|||||||
if (i < infix.size () &&
|
if (i < infix.size () &&
|
||||||
parseComparative (infix, i))
|
parseComparative (infix, i))
|
||||||
{
|
{
|
||||||
while ((infix[i].first == "==" ||
|
while (i < infix.size () &&
|
||||||
|
(infix[i].first == "==" ||
|
||||||
infix[i].first == "=" ||
|
infix[i].first == "=" ||
|
||||||
infix[i].first == "!=") &&
|
infix[i].first == "!=") &&
|
||||||
infix[i].second == Lexer::typeOperator)
|
infix[i].second == Lexer::typeOperator)
|
||||||
@@ -508,7 +511,8 @@ bool Eval::parseComparative (
|
|||||||
if (i < infix.size () &&
|
if (i < infix.size () &&
|
||||||
parseArithmetic (infix, i))
|
parseArithmetic (infix, i))
|
||||||
{
|
{
|
||||||
while ((infix[i].first == "<=" ||
|
while (i < infix.size () &&
|
||||||
|
(infix[i].first == "<=" ||
|
||||||
infix[i].first == "<" ||
|
infix[i].first == "<" ||
|
||||||
infix[i].first == ">=" ||
|
infix[i].first == ">=" ||
|
||||||
infix[i].first == ">") &&
|
infix[i].first == ">") &&
|
||||||
@@ -540,7 +544,8 @@ bool Eval::parseArithmetic (
|
|||||||
if (i < infix.size () &&
|
if (i < infix.size () &&
|
||||||
parseGeometric (infix, i))
|
parseGeometric (infix, i))
|
||||||
{
|
{
|
||||||
while ((infix[i].first == "+" ||
|
while (i < infix.size () &&
|
||||||
|
(infix[i].first == "+" ||
|
||||||
infix[i].first == "-") &&
|
infix[i].first == "-") &&
|
||||||
infix[i].second == Lexer::typeOperator)
|
infix[i].second == Lexer::typeOperator)
|
||||||
{
|
{
|
||||||
@@ -570,7 +575,8 @@ bool Eval::parseGeometric (
|
|||||||
if (i < infix.size () &&
|
if (i < infix.size () &&
|
||||||
parseTag (infix, i))
|
parseTag (infix, i))
|
||||||
{
|
{
|
||||||
while ((infix[i].first == "*" ||
|
while (i < infix.size () &&
|
||||||
|
(infix[i].first == "*" ||
|
||||||
infix[i].first == "/" ||
|
infix[i].first == "/" ||
|
||||||
infix[i].first == "%") &&
|
infix[i].first == "%") &&
|
||||||
infix[i].second == Lexer::typeOperator)
|
infix[i].second == Lexer::typeOperator)
|
||||||
@@ -601,7 +607,8 @@ bool Eval::parseTag (
|
|||||||
if (i < infix.size () &&
|
if (i < infix.size () &&
|
||||||
parseUnary (infix, i))
|
parseUnary (infix, i))
|
||||||
{
|
{
|
||||||
while ((infix[i].first == "_hastag_" ||
|
while (i < infix.size () &&
|
||||||
|
(infix[i].first == "_hastag_" ||
|
||||||
infix[i].first == "_notag_") &&
|
infix[i].first == "_notag_") &&
|
||||||
infix[i].second == Lexer::typeOperator)
|
infix[i].second == Lexer::typeOperator)
|
||||||
{
|
{
|
||||||
@@ -669,7 +676,8 @@ bool Eval::parseExponent (
|
|||||||
if (i < infix.size () &&
|
if (i < infix.size () &&
|
||||||
parsePrimitive (infix, i))
|
parsePrimitive (infix, i))
|
||||||
{
|
{
|
||||||
while (infix[i].first == "^" &&
|
while (i < infix.size () &&
|
||||||
|
infix[i].first == "^" &&
|
||||||
infix[i].second == Lexer::typeOperator)
|
infix[i].second == Lexer::typeOperator)
|
||||||
{
|
{
|
||||||
if (_debug)
|
if (_debug)
|
||||||
|
|||||||
Reference in New Issue
Block a user