From 69a71d0c8ebbdeaf9ed9446e670cd61763595ab3 Mon Sep 17 00:00:00 2001 From: Oliver Hamlet Date: Sat, 20 Aug 2016 15:26:31 +0100 Subject: [PATCH] Fix cached plugin CRCs failing checksum conditions If a plugin's CRC value was cached, it would cause any condition that checks it to evaluate to false. This wouldn't occur when LOOT is launched, but could have caused messages to disappear if the masterlist was re-evaluated after sorting. --- src/backend/metadata/condition_evaluator.cpp | 2 -- .../backend/metadata/condition_grammar_test.h | 15 +++++++++++++++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/backend/metadata/condition_evaluator.cpp b/src/backend/metadata/condition_evaluator.cpp index fae49c33..c4565c83 100644 --- a/src/backend/metadata/condition_evaluator.cpp +++ b/src/backend/metadata/condition_evaluator.cpp @@ -135,8 +135,6 @@ bool ConditionEvaluator::checksumMatches(const std::string& filePath, const uint realChecksum = GetCrc32(game_->DataPath() / filePath); else if ((boost::iends_with(filePath, ".esp") || boost::iends_with(filePath, ".esm")) && boost::filesystem::exists(game_->DataPath() / (filePath + ".ghost"))) realChecksum = GetCrc32(game_->DataPath() / (filePath + ".ghost")); - } else { - return false; } } diff --git a/src/tests/backend/metadata/condition_grammar_test.h b/src/tests/backend/metadata/condition_grammar_test.h index 4f363008..086b5f32 100644 --- a/src/tests/backend/metadata/condition_grammar_test.h +++ b/src/tests/backend/metadata/condition_grammar_test.h @@ -247,6 +247,21 @@ TEST_P(ConditionGrammarTest, aChecksumConditionWithACrcThatMatchesTheActualPlugi EXPECT_TRUE(result_); } +TEST_P(ConditionGrammarTest, aChecksumConditionWithACrcThatMatchesTheActualCachedPluginCrcShouldEvaluateToTrue) { + ASSERT_NO_THROW(game_.LoadAllInstalledPlugins(false)); + + Grammar grammar(&game_); + std::string condition("checksum(\"" + blankEsm + "\", " + IntToHexString(blankEsmCrc) + ")"); + + success_ = boost::spirit::qi::phrase_parse(std::cbegin(condition), + std::cend(condition), + grammar, + skipper_, + result_); + EXPECT_TRUE(success_); + EXPECT_TRUE(result_); +} + TEST_P(ConditionGrammarTest, aChecksumConditionWithACrcThatDoesNotMatchTheActualPluginCrcShouldEvaluateToFalse) { Grammar grammar(&game_); std::string condition("checksum(\"" + blankEsm + "\", DEADBEEF)");