From 53f375b0ec38a537aa5aa7b069875b48a6eb80c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9o=20Lam?= Date: Fri, 25 Sep 2020 20:27:18 +0200 Subject: [PATCH] ksys/util: Fix matching issue in StrTreeMapKey::setKey The stack variable is in fact a StrTreeMapKey temporary that is used by the default assignment operator. --- data/uking_functions.csv | 2 +- src/KingSystem/Utils/StrTreeMap.h | 11 ++++------- 2 files changed, 5 insertions(+), 8 deletions(-) diff --git a/data/uking_functions.csv b/data/uking_functions.csv index aba6904e..2fa6c45d 100644 --- a/data/uking_functions.csv +++ b/data/uking_functions.csv @@ -89551,7 +89551,7 @@ 0x00000071011bd2e4,sub_71011BD2E4,36, 0x00000071011bd308,BaseProcMgr::init,680, 0x00000071011bd5b0,BaseProcMgr::generateActorId,28,_ZN4ksys3act11BaseProcMgr14generateProcIdEPj -0x00000071011bd5cc,BaseProcMgr::registerActor,156,_ZN4ksys3act11BaseProcMgr12registerProcERNS0_8BaseProcE? +0x00000071011bd5cc,BaseProcMgr::registerActor,156,_ZN4ksys3act11BaseProcMgr12registerProcERNS0_8BaseProcE 0x00000071011bd668,StringMap::insert,316,_ZN4ksys3act11BaseProcMap6insertEPNS0_15BaseProcMapNodeE 0x00000071011bd7a4,BaseProcMgr::unregisterActor,188,_ZN4ksys3act11BaseProcMgr14unregisterProcERNS0_8BaseProcE 0x00000071011bd860,BaseProcMgr::requestPreDelete,8, diff --git a/src/KingSystem/Utils/StrTreeMap.h b/src/KingSystem/Utils/StrTreeMap.h index d12bbcc6..458e7eab 100644 --- a/src/KingSystem/Utils/StrTreeMap.h +++ b/src/KingSystem/Utils/StrTreeMap.h @@ -8,16 +8,13 @@ namespace ksys::util { class StrTreeMapKey { public: + StrTreeMapKey() = default; + StrTreeMapKey(u32 key_hash, const sead::SafeString& key) : mKeyHash(key_hash), mKey(key) {} + const sead::SafeString& key() const { return mKey; } - // NON_MATCHING: stack - void setKey(u32 hash, sead::SafeString key) { - mKeyHash = hash; - mKey = key; - } - void setKey(const sead::SafeString& key) { - setKey(sead::HashCRC32::calcStringHash(key.cstr()), key); + *this = {sead::HashCRC32::calcStringHash(key.cstr()), key}; } s32 compare(const StrTreeMapKey& rhs) const {