Merge pull request #1217 from ZeldaZach/fix_cheat
Prevent Hash Collision
This commit is contained in:
commit
e76c109f2d
1 changed files with 21 additions and 6 deletions
|
@ -726,13 +726,28 @@ bool DeckList::deleteNode(AbstractDecklistNode *node, InnerDecklistNode *rootNod
|
||||||
void DeckList::updateDeckHash()
|
void DeckList::updateDeckHash()
|
||||||
{
|
{
|
||||||
QStringList cardList;
|
QStringList cardList;
|
||||||
for (int i = 0; i < root->size(); i++) {
|
bool isValidDeckList = true;
|
||||||
|
QSet<QString> hashZones, optionalZones;
|
||||||
|
|
||||||
|
hashZones << "main" << "side"; // Zones in deck to be included in hashing process
|
||||||
|
optionalZones << "tokens"; // Optional zones in deck not included in hashing process
|
||||||
|
|
||||||
|
for (int i = 0; i < root->size(); i++)
|
||||||
|
{
|
||||||
InnerDecklistNode *node = dynamic_cast<InnerDecklistNode *>(root->at(i));
|
InnerDecklistNode *node = dynamic_cast<InnerDecklistNode *>(root->at(i));
|
||||||
for (int j = 0; j < node->size(); j++) {
|
for (int j = 0; j < node->size(); j++)
|
||||||
|
{
|
||||||
|
if (hashZones.contains(node->getName())) // Mainboard or Sideboard
|
||||||
|
{
|
||||||
DecklistCardNode *card = dynamic_cast<DecklistCardNode *>(node->at(j));
|
DecklistCardNode *card = dynamic_cast<DecklistCardNode *>(node->at(j));
|
||||||
for (int k = 0; k < card->getNumber(); ++k)
|
for (int k = 0; k < card->getNumber(); ++k)
|
||||||
cardList.append((node->getName() == "side" ? "SB:" : "") + card->getName().toLower());
|
cardList.append((node->getName() == "side" ? "SB:" : "") + card->getName().toLower());
|
||||||
}
|
}
|
||||||
|
else if (!optionalZones.contains(node->getName())) // Not a valid zone -> cheater?
|
||||||
|
{
|
||||||
|
isValidDeckList = false; // Deck is invalid
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
cardList.sort();
|
cardList.sort();
|
||||||
QByteArray deckHashArray = QCryptographicHash::hash(cardList.join(";").toUtf8(), QCryptographicHash::Sha1);
|
QByteArray deckHashArray = QCryptographicHash::hash(cardList.join(";").toUtf8(), QCryptographicHash::Sha1);
|
||||||
|
@ -741,7 +756,7 @@ void DeckList::updateDeckHash()
|
||||||
+ (((quint64) (unsigned char) deckHashArray[2] << 16))
|
+ (((quint64) (unsigned char) deckHashArray[2] << 16))
|
||||||
+ (((quint64) (unsigned char) deckHashArray[3]) << 8)
|
+ (((quint64) (unsigned char) deckHashArray[3]) << 8)
|
||||||
+ (quint64) (unsigned char) deckHashArray[4];
|
+ (quint64) (unsigned char) deckHashArray[4];
|
||||||
deckHash = QString::number(number, 32).rightJustified(8, '0');
|
deckHash = (isValidDeckList) ? QString::number(number, 32).rightJustified(8, '0') : "INVALID";
|
||||||
|
|
||||||
emit deckHashChanged();
|
emit deckHashChanged();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue