From 61ce332003a8b3bae093aaf8a84249b2cca70040 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9o=20Lam?= Date: Sat, 12 Jun 2021 19:41:00 +0200 Subject: [PATCH] ksys/res: Add AVOID_UB ifdef for bad memset in AnimInfo::parse_ --- src/KingSystem/Resource/resResourceAnimInfo.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/KingSystem/Resource/resResourceAnimInfo.cpp b/src/KingSystem/Resource/resResourceAnimInfo.cpp index edee3386..6e0672d8 100644 --- a/src/KingSystem/Resource/resResourceAnimInfo.cpp +++ b/src/KingSystem/Resource/resResourceAnimInfo.cpp @@ -101,9 +101,13 @@ bool AnimInfo::parse_(u8* data, size_t size, sead::Heap* heap) { /// The only reason using SwordBlur::name doesn't crash is that Clang and GHS /// are smart enough to devirtualize sead::SafeString virtual function calls, /// which removes the need to go through the vtable. +#ifdef AVOID_UB + info->entries = new (heap) SwordBlur[info->num_entries]; +#else info->entries = static_cast( heap->tryAlloc(sizeof(SwordBlur) * info->num_entries, alignof(SwordBlur))); std::memset(info->entries, 0, sizeof(SwordBlur) * info->num_entries); +#endif } // TODO / FIXME: finish this