From 5642772ec45342284c119abf688f5871d755004f Mon Sep 17 00:00:00 2001 From: JosJuice Date: Sat, 28 Nov 2020 23:31:48 +0100 Subject: [PATCH] Movie: Fix 83b9fef regressions 1. Comparing string_views does not behave the same as strncmp in the case where SConfig's game ID is longer than 6 chars. 2. DTMHeader::GetGameID wasn't excluding null bytes for game IDs shorter than 6 chars. 3. == was accidentally used instead of !=. --- Source/Core/Core/Movie.cpp | 2 +- Source/Core/Core/Movie.h | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/Source/Core/Core/Movie.cpp b/Source/Core/Core/Movie.cpp index fa67c9d0bc..68dd2c60a4 100644 --- a/Source/Core/Core/Movie.cpp +++ b/Source/Core/Core/Movie.cpp @@ -227,7 +227,7 @@ void Init(const BootParameters& boot) ReadHeader(); std::thread md5thread(CheckMD5); md5thread.detach(); - if (tmpHeader.GetGameID() == SConfig::GetInstance().GetGameID()) + if (strncmp(tmpHeader.gameID.data(), SConfig::GetInstance().GetGameID().c_str(), 6)) { PanicAlertFmtT("The recorded game ({0}) is not the same as the selected game ({1})", tmpHeader.GetGameID(), SConfig::GetInstance().GetGameID()); diff --git a/Source/Core/Core/Movie.h b/Source/Core/Core/Movie.h index dd55bea55b..e76ea6a10e 100644 --- a/Source/Core/Core/Movie.h +++ b/Source/Core/Core/Movie.h @@ -5,6 +5,7 @@ #pragma once #include +#include #include #include #include @@ -64,7 +65,10 @@ static_assert(sizeof(ControllerState) == 8, "ControllerState should be 8 bytes") #pragma pack(push, 1) struct DTMHeader { - std::string_view GetGameID() const { return {gameID.data(), gameID.size()}; } + std::string_view GetGameID() const + { + return {gameID.data(), strnlen(gameID.data(), gameID.size())}; + } std::array filetype; // Unique Identifier (always "DTM"0x1A)