diff options
| author | 2019-07-25 22:29:20 +0200 | |
|---|---|---|
| committer | 2019-07-25 22:29:20 +0200 | |
| commit | 8b04d886845be5c3b57caae4d96b53133c51ab14 (patch) | |
| tree | 0c22e33e8f9246b38dd1cac901b0ea11fc19ca07 | |
| parent | 611aa0defd63ebc3b4e3d16a86c495a9af120728 (diff) | |
| download | OneRoll-8b04d886845be5c3b57caae4d96b53133c51ab14.tar.gz OneRoll-8b04d886845be5c3b57caae4d96b53133c51ab14.zip | |
Fix crash found by afl
| -rw-r--r-- | booleancondition.cpp | 5 | ||||
| -rw-r--r-- | node/scalaroperatornode.cpp | 7 | ||||
| -rw-r--r-- | operationcondition.cpp | 4 | ||||
| -rw-r--r-- | parsingtoolbox.cpp | 8 |
4 files changed, 21 insertions, 3 deletions
diff --git a/booleancondition.cpp b/booleancondition.cpp index c81f5ab..6747727 100644 --- a/booleancondition.cpp +++ b/booleancondition.cpp @@ -159,5 +159,8 @@ qint64 BooleanCondition::valueToScalar() const m_value->run(nullptr); auto result= m_value->getResult(); - return result->getResult(Dice::RESULT_TYPE::SCALAR).toInt(); + if(result) + return result->getResult(Dice::RESULT_TYPE::SCALAR).toInt(); + else + return 0; } diff --git a/node/scalaroperatornode.cpp b/node/scalaroperatornode.cpp index 9edbcdc..821150b 100644 --- a/node/scalaroperatornode.cpp +++ b/node/scalaroperatornode.cpp @@ -66,6 +66,13 @@ void ScalarOperatorNode::run(ExecutionNode* previous) m_internalNode->getResult()->setPrevious(previousResult); } + if(internalResult == nullptr) + { + m_errors.insert(Dice::ERROR_CODE::NO_VALID_RESULT, + QObject::tr("No Valid result in arithmetic operatoion: %1").arg(toString(true))); + return; + } + switch(m_arithmeticOperator) { case Die::PLUS: diff --git a/operationcondition.cpp b/operationcondition.cpp index 67b10fc..507416d 100644 --- a/operationcondition.cpp +++ b/operationcondition.cpp @@ -41,6 +41,10 @@ void OperationCondition::setBoolean(BooleanCondition* boolean) qint64 OperationCondition::hasValid(Die* b, bool recursive, bool unhighlight) const { + if(nullptr == m_boolean) + { + return 0; + } QList<qint64> listValues; if(recursive) { diff --git a/parsingtoolbox.cpp b/parsingtoolbox.cpp index 702019d..2453eb7 100644 --- a/parsingtoolbox.cpp +++ b/parsingtoolbox.cpp @@ -204,13 +204,17 @@ Validator* ParsingToolBox::readValidator(QString& str, bool hasSquare) { OperationCondition* condition= new OperationCondition(); condition->setValueNode(operandNode); - Validator* valid= readValidator(str,hasSquare); + Validator* valid= readValidator(str, hasSquare); BooleanCondition* boolC= dynamic_cast<BooleanCondition*>(valid); if(nullptr != boolC) { condition->setBoolean(boolC); + returnVal= condition; + } + else + { + delete condition; } - returnVal= condition; } } else if(readOperand(str, operandNode)) |