aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/src/libparser/node/bind.cpp
diff options
context:
space:
mode:
authorRenaud Guezennec <renaud@rolisteam.org>2024-12-28 15:00:29 +0100
committerRenaud Guezennec <renaud@rolisteam.org>2024-12-29 14:46:30 +0100
commit5c508b351a95f416e4a599f76902b888369de1b4 (patch)
treee3f6363fd7458fb0a46eabde6bd3a65b4746d798 /src/libparser/node/bind.cpp
parent5515cd5a22ab97843f6ca1c234333ec110a9bab1 (diff)
downloadOneRoll-5c508b351a95f416e4a599f76902b888369de1b4.tar.gz
OneRoll-5c508b351a95f416e4a599f76902b888369de1b4.zip
Several fix from fuzzer test.
Diffstat (limited to 'src/libparser/node/bind.cpp')
-rw-r--r--src/libparser/node/bind.cpp37
1 files changed, 23 insertions, 14 deletions
diff --git a/src/libparser/node/bind.cpp b/src/libparser/node/bind.cpp
index 41449d8..9c502df 100644
--- a/src/libparser/node/bind.cpp
+++ b/src/libparser/node/bind.cpp
@@ -38,27 +38,36 @@ void BindNode::run(ExecutionNode* previous)
for(auto start : *m_startList)
{
ExecutionNode* last= getLatestNode(start);
- if(nullptr != last)
+ if(!last)
+ continue;
+
+ auto tmpResult= last->getResult();
+ QSet<Result*> alreadyVisited;
+ while(nullptr != tmpResult && !alreadyVisited.contains(tmpResult))
{
- auto tmpResult= last->getResult();
- while(nullptr != tmpResult)
+ alreadyVisited.insert(tmpResult);
+ DiceResult* dice= dynamic_cast<DiceResult*>(tmpResult);
+
+ if(nullptr != dice)
{
- DiceResult* dice= dynamic_cast<DiceResult*>(tmpResult);
- if(nullptr != dice)
+ m_diceResult->setHomogeneous(false);
+ auto list= dice->getResultList();
+ for(int i= 0; i < list.size(); ++i)
{
- m_diceResult->setHomogeneous(false);
- for(auto& die : dice->getResultList())
+ auto die= list[i];
+
+ if(!die)
+ continue;
+
+ if(!die->hasBeenDisplayed())
{
- if(!die->hasBeenDisplayed())
- {
- Die* tmpdie= new Die(*die);
- die->displayed();
- m_diceResult->getResultList().append(tmpdie);
- }
+ Die* tmpdie= new Die(*die);
+ die->displayed();
+ m_diceResult->getResultList().append(tmpdie);
}
}
- tmpResult= tmpResult->getPrevious();
}
+ tmpResult= tmpResult->getPrevious();
}
}
}