diff options
| author | 2024-12-28 15:00:29 +0100 | |
|---|---|---|
| committer | 2024-12-29 14:46:30 +0100 | |
| commit | 5c508b351a95f416e4a599f76902b888369de1b4 (patch) | |
| tree | e3f6363fd7458fb0a46eabde6bd3a65b4746d798 /src/libparser/parsingtoolbox.cpp | |
| parent | 5515cd5a22ab97843f6ca1c234333ec110a9bab1 (diff) | |
| download | OneRoll-5c508b351a95f416e4a599f76902b888369de1b4.tar.gz OneRoll-5c508b351a95f416e4a599f76902b888369de1b4.zip | |
Several fix from fuzzer test.
Diffstat (limited to 'src/libparser/parsingtoolbox.cpp')
| -rw-r--r-- | src/libparser/parsingtoolbox.cpp | 35 |
1 files changed, 21 insertions, 14 deletions
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<Dice::LogicOperation> operators; QList<Validator*> 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: |