From 5c508b351a95f416e4a599f76902b888369de1b4 Mon Sep 17 00:00:00 2001 From: Renaud Guezennec Date: Sat, 28 Dec 2024 15:00:29 +0100 Subject: Several fix from fuzzer test. --- src/libparser/parsingtoolbox.cpp | 35 +++++++++++++++++++++-------------- 1 file changed, 21 insertions(+), 14 deletions(-) (limited to 'src/libparser/parsingtoolbox.cpp') diff --git a/src/libparser/parsingtoolbox.cpp b/src/libparser/parsingtoolbox.cpp index 4d75ede..a7b089d 100644 --- a/src/libparser/parsingtoolbox.cpp +++ b/src/libparser/parsingtoolbox.cpp @@ -306,6 +306,8 @@ Validator* ParsingToolBox::readValidator(QString& str, bool hasSquare) qint64 start= operandNode->getScalarResult(); Range* range= new Range(); range->setConditionType(opCompare); + if(start > end) + qDebug() << "ERRORRR"; range->setValue(start, end); returnVal= range; isRange= true; @@ -361,12 +363,13 @@ ValidatorList* ParsingToolBox::readValidatorList(QString& str) str= str.remove(0, 1); expectSquareBrasket= true; } + ValidatorList* result{nullptr}; Validator* tmp= readValidator(str, expectSquareBrasket); Dice::LogicOperation opLogic; QVector operators; QList validatorList; - + bool isOK{true}; while(nullptr != tmp) { bool hasOperator= readLogicOperation(str, opLogic); @@ -381,23 +384,26 @@ ValidatorList* ParsingToolBox::readValidatorList(QString& str) if((expectSquareBrasket) && (str.startsWith("]"))) { str= str.remove(0, 1); - // isOk=true; + isOK= true; + } + else + { + // addError(Dice::ERROR_CODE::BAD_SYNTAXE, + // QStringLiteral("Syntax Error: no closing square bracket: %1").arg(str)); } validatorList.append(tmp); tmp= nullptr; } } - if(!validatorList.isEmpty()) - { - ValidatorList* validator= new ValidatorList(); - validator->setOperationList(operators); - validator->setValidators(validatorList); - return validator; - } - else + + if(!validatorList.isEmpty() && isOK) { - return nullptr; + result= new ValidatorList(); + result->setOperationList(operators); + result->setValidators(validatorList); } + + return result; } bool ParsingToolBox::readLogicOperation(QString& str, Dice::LogicOperation& op) { @@ -1820,8 +1826,8 @@ bool ParsingToolBox::readOption(QString& str, ExecutionNode* previous) //, break; case Merge: { - MergeNode* mergeNode= new MergeNode(); - mergeNode->setStartList(&m_startNodes); + MergeNode* mergeNode= new MergeNode(m_startNodes); + // mergeNode->setStartList(m_startNodes); previous->setNextNode(mergeNode); found= true; } @@ -1844,7 +1850,8 @@ bool ParsingToolBox::readOption(QString& str, ExecutionNode* previous) //, { auto scNode= new ReplaceValueNode(); found= readReplaceValueNode(str, scNode); - previous->setNextNode(scNode); + if(found) + previous->setNextNode(scNode); } break; case Bind: -- cgit v1.2.3-70-g09d2