Skip to content

Commit 9e6682c

Browse files
committed
Improved validity checks on FindFFieldEditorOnlyMetaDataOffset.
1 parent 26a035b commit 9e6682c

1 file changed

Lines changed: 16 additions & 1 deletion

File tree

Dumper/Engine/Private/OffsetFinder/OffsetFinder.cpp

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -532,12 +532,27 @@ int32_t OffsetFinder::FindFFieldEditorOnlyMetaDataOffset()
532532
const TMap<Name08Byte, FString>* PossibleMetaDataPtr1 = *reinterpret_cast<TMap<Name08Byte, FString>**>(reinterpret_cast<uintptr_t>(GuidChild1.GetAddress()) + Offset);
533533
const TMap<Name08Byte, FString>* PossibleMetaDataPtr2 = *reinterpret_cast<TMap<Name08Byte, FString>**>(reinterpret_cast<uintptr_t>(GuidChild2.GetAddress()) + Offset);
534534

535-
if (!PossibleMetaDataPtr1 || !PossibleMetaDataPtr2)
535+
if (!PossibleMetaDataPtr1 || !PossibleMetaDataPtr2 || Platform::IsBadReadPtr(PossibleMetaDataPtr1) || Platform::IsBadReadPtr(PossibleMetaDataPtr2))
536536
continue;
537537

538538
if (!PossibleMetaDataPtr1->IsValid() || !PossibleMetaDataPtr2->IsValid())
539539
continue;
540540

541+
if (PossibleMetaDataPtr1->Num() <= 0 || PossibleMetaDataPtr2->Num() <= 0)
542+
continue;
543+
544+
if (PossibleMetaDataPtr1->Num() >= 0x10 || PossibleMetaDataPtr2->Num() >= 0x10)
545+
continue;
546+
547+
auto GetDataPtrOfArrayInMap = [](const auto& Map) -> const void*
548+
{
549+
// TMap data is stored at offset 0x0, this is a hacky way to get the TArray::Data member of the map
550+
return *reinterpret_cast<const void* const*>(&Map);
551+
};
552+
553+
if (Platform::IsBadReadPtr(GetDataPtrOfArrayInMap(PossibleMetaDataPtr1)) || Platform::IsBadReadPtr(GetDataPtrOfArrayInMap(PossibleMetaDataPtr2)))
554+
continue;
555+
541556
if (Off::InSDK::Name::FNameSize <= 0x8)
542557
{
543558
if (AreValidMetadataMaps(PossibleMetaDataPtr1, PossibleMetaDataPtr2))

0 commit comments

Comments
 (0)