Context
In actor blueprints, you can change an inherited component’s class in the editor by selecting it in a child blueprint and changing its Component Class in the Details panel.
Problem
When overriding a component’s class in the editor and opening a map that has saved instances with the previous component’s class, the new component class’s Serialize is called on the old component class’s serialized data. If the new component class is a specializing class whose native Serialize writes more data, it’s likely to read past what the old component class wrote, likely causing a crash.
Suggestions
FLinkerLoad::Preload has an existing path to only bSerializeOnlyScriptProperties, salvaging properties that can be salvaged. When a ComponentClass is overridden causing a class mismatch here, consider also taking that fallback. At the very least, native (de)serialize is dangerous to call when the template object class is a specialization of the saved object c lass.
Written by licensee. 100% repro in UE 5.7.
The Editor will then freeze and crash.
UnrealEditor-CoreUObject.dll!FLinkerTables::Imp(FPackageIndex Index) Line 140 C++
UnrealEditor-CoreUObject.dll!FLinkerLoad::operator<<(FObjectPtr & ObjectPtr) Line 6467 C++
[Inline Frame] UnrealEditor-Engine.dll!ObjectPtr_Private::Friend::Serialize(FArchive &) Line 856 C++
[Inline Frame] UnrealEditor-Engine.dll!operator<<(FArchive &) Line 956 C++
UnrealEditor-Engine.dll!UStaticMeshComponent::Serialize(FArchive & Ar) Line 464 C++
UnrealEditor-CoreUObject.dll!FLinkerLoad::Preload(UObject * Object) Line 4976 C++
UnrealEditor-CoreUObject.dll!FAsyncPackage2::PreloadLinkerLoadExports(FAsyncLoadingThreadState2 & ThreadState) Line 7259 C++
UnrealEditor-CoreUObject.dll!FAsyncPackage2::Event_PreloadLinkerLoadExports(FAsyncLoadingThreadState2 & ThreadState, FAsyncPackage2 * Package, int __formal) Line 7687 C++
UnrealEditor-CoreUObject.dll!FEventLoadNode2::Execute(FAsyncLoadingThreadState2 & ThreadState) Line 5979 C++
UnrealEditor-CoreUObject.dll!FAsyncLoadEventQueue2::ExecuteSyncLoadEvents(FAsyncLoadingThreadState2 & ThreadState) Line 6186 C++
UnrealEditor-CoreUObject.dll!FAsyncLoadingThread2::ProcessAsyncLoadingFromGameThread(FAsyncLoadingThreadState2 & ThreadState, bool & bDidSomething) Line 9858 C++
[Inline Frame] UnrealEditor-CoreUObject.dll!FAsyncLoadingThread2::TickAsyncThreadFromGameThread(FAsyncLoadingThreadState2 &) Line 10587 C++
UnrealEditor-CoreUObject.dll!FAsyncLoadingThread2::TickAsyncLoadingFromGameThread(FAsyncLoadingThreadState2 & ThreadState, bool bUseTimeLimit, bool bUseFullTimeLimit, double TimeLimit, TArrayView<int const ,int> FlushRequestIDs, bool & bDidSomething) Line 10203 C++
UnrealEditor-CoreUObject.dll!FAsyncLoadingThread2::FlushLoading(TArrayView<int const ,int> RequestIDs) Line 11909 C++
UnrealEditor-CoreUObject.dll!FlushAsyncLoading(TArrayView<int const ,int> RequestIds) Line 354 C++
UnrealEditor-Engine.dll!FWorldPartitionLoadingContext::FDeferred::Unknown macro: {dtor}::__l8::<lambda_1>::operator()(TArray<AActor *,TSizedDefaultAllocator<32>> & ActorList, const TSet<FWorldPartitionActorDescInstance *,DefaultKeyFuncs<FWorldPartitionActorDescInstance *,0>,FDefaultSetAllocator> & SourceList) Line 178 C++
UnrealEditor-Engine.dll!FWorldPartitionLoadingContext::FDeferred::~FDeferred() Line 201 C++
UnrealEditor-Engine.dll!IWorldPartitionActorLoaderInterface::ILoaderAdapter::RefreshLoadedState() Line 190 C++
[Inline Frame] UnrealEditor-Engine.dll!IWorldPartitionActorLoaderInterface::ILoaderAdapter::Load() Line 54 C++
UnrealEditor-Engine.dll!UWorldPartition::LoadLastLoadedRegions(const TArray<UE::Math::TBox<double>,TSizedDefaultAllocator<32>> & EditorLastLoadedRegions) Line 2378 C++
UnrealEditor-Engine.dll!UWorldPartition::LoadLastLoadedRegions() Line 2390 C++
UnrealEditor-Engine.dll!UWorldPartition::Initialize(UWorld * InWorld, const UE::Math::TTransform<double> & InTransform) Line 845 C++
UnrealEditor-Engine.dll!ULevel::OnLevelLoaded() Line 3501 C++
UnrealEditor-Engine.dll!UWorld::InitWorld(const FWorldInitializationValues IVS) Line 2519 C++
UnrealEditor-UnrealEd.dll!UEditorEngine::Map_Load(const wchar_t * Str, FOutputDevice & Ar) Line 2667 C++
UnrealEditor-UnrealEd.dll!UEditorEngine::HandleMapCommand(const wchar_t * Str, FOutputDevice & Ar, UWorld * InWorld) Line 6227 C++
UnrealEditor-UnrealEd.dll!UEditorEngine::Exec_Editor(UWorld * InWorld, const wchar_t * Stream, FOutputDevice & Ar) Line 5688 C++
UnrealEditor-Core.dll!FExec::Exec(UWorld * InWorld, const wchar_t * Cmd, FOutputDevice & Ar) Line 18 C++
UnrealEditor-Engine.dll!UEngine::Exec(UWorld * InWorld, const wchar_t * Cmd, FOutputDevice & Ar) Line 5213 C++
UnrealEditor-UnrealEd.dll!UUnrealEdEngine::Exec(UWorld * InWorld, const wchar_t * Stream, FOutputDevice & Ar) Line 662 C++
UnrealEditor-UnrealEd.dll!FEditorFileUtils::LoadMap(const FString & InFilename, bool LoadAsTemplate, const bool bShowProgress) Line 3306 C++
There's no existing public thread on this issue, so head over to Questions & Answers just mention UE-377471 in the post.