From 52cc725de4e57e44d052e53d972f987359f1c742 Mon Sep 17 00:00:00 2001 From: ctrlaltca Date: Sun, 10 Mar 2019 18:47:24 +0100 Subject: [PATCH] Fix crash on card relation to inexistent card; fix #3637 (#3640) * Fix crash on card relation to inexistent card; fix #3637 But that whole loop is a logic mess * Check if related cards exists before creating the menu entry * honor and glory to the hypnoclanfigier --- cockatrice/src/player.cpp | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/cockatrice/src/player.cpp b/cockatrice/src/player.cpp index 232ba031..c4898e49 100644 --- a/cockatrice/src/player.cpp +++ b/cockatrice/src/player.cpp @@ -3065,8 +3065,17 @@ void Player::addRelatedCardView(const CardItem *card, QMenu *cardMenu) return; } + bool atLeastOneGoodRelationFound = false; QList relatedCards = cardInfo->getAllRelatedCards(); - if (relatedCards.isEmpty()) { + for (const CardRelation *cardRelation : relatedCards) { + CardInfoPtr relatedCard = db->getCard(cardRelation->getName()); + if (relatedCard != nullptr) { + atLeastOneGoodRelationFound = true; + break; + } + } + + if (!atLeastOneGoodRelationFound) { return; } @@ -3137,11 +3146,14 @@ void Player::addRelatedCardActions(const CardItem *card, QMenu *cardMenu) cardMenu->addAction(createRelated); } - if (shortcutsActive) { - createRelatedCards->setShortcut(settingsCache->shortcuts().getSingleShortcut("Player/aCreateRelatedTokens")); + if (createRelatedCards) { + if (shortcutsActive) { + createRelatedCards->setShortcut( + settingsCache->shortcuts().getSingleShortcut("Player/aCreateRelatedTokens")); + } + connect(createRelatedCards, SIGNAL(triggered()), this, SLOT(actCreateAllRelatedCards())); + cardMenu->addAction(createRelatedCards); } - connect(createRelatedCards, SIGNAL(triggered()), this, SLOT(actCreateAllRelatedCards())); - cardMenu->addAction(createRelatedCards); } void Player::setCardMenu(QMenu *menu)