Description

In UE 5.5, when the user attempts to save the level blueprint of a world-partition map, the Editor crashes if the BP contains any node with an input pin of type "Gameplay Attribute Structure", as long as that input pin is not set to "None" or connected to the output of another node. The node does not need to be connected, in fact the crash happens even if it is the only node in the graph. The crash does not seem to repro with any other kind of blueprint, including non-world-partition level blueprints with or without external actors.

In the related UDN case, the licensee was able to track this crash back to CL 33549276 (commit 84cfe7e) in ue5-main branch, which addressed [Link Removed]. This change added SetIsSaving(true) to the constructor of FArchiveGatherExternalActorRefs on file [Engine/Source/Runtime/Engine/Private/ActorReferencesUtils.cpp:42]. As a consequence, function UK2Node::Serialize() now runs the code under condition Ar.IsSaving() [Engine/Source/Editor/BlueprintGraph/Private/K2Node.cpp:124]. This starts a call chain that ends up calling FObjectPropertyBase::FindImportedObject() while GIsSavingPackage is true. Inside, because GIsSavingPackage is true, some attempts at StaticFindObjectSafe() fail, and then an attempt at StaticFindFirstObject() crashes inside StaticFindAllObjectsFast(). The related UDN case contains quick links to all the relevant parts of the code on GitHub.

Steps to Reproduce

1. Create a new project
2. Enable the Gameplay Abilities plugin
3. Create a new level from the "Empty Open World" template
4. Save the new level
5. Open the Level Blueprint
6. Add a single node: "Ability > Attribute > Is Valid"
7. On the "Attribute" input pin, select anything other than "None"
8. Save --> Crash!

Note: The crash does not repro if the "Attribute" input pin is set to "None" or connected to the output of another node. It also does not seem to repro with any other kind of blueprint, including non-world-partition level blueprints with or without external actors.

Callstack

[Inline Frame] UnrealEditor-Core.dll!UE::Logging::Private::BasicFatalLog::__l2::<lambda>() Line 1103 C++
UnrealEditor-Core.dll!UE::Logging::Private::BasicFatalLog(const FLogCategoryBase & Category, const UE::Logging::Private::FStaticBasicLogRecord * Log, ...) Line 1103 C++
[Inline Frame] UnrealEditor-CoreUObject.dll!StaticFindAllObjectsFast(TArray<UObject *,TSizedDefaultAllocator<32>> &) Line 662 C++
UnrealEditor-CoreUObject.dll!StaticFindFirstObject(UClass * Class, const wchar_t * Name, EFindFirstObjectOptions Options, ELogVerbosity::Type AmbiguousMessageVerbosity, const wchar_t * InCurrentOperation) Line 744 C++
UnrealEditor-CoreUObject.dll!FObjectPropertyBase::FindImportedObject(const FProperty * Property, UObject * OwnerObject, UClass * ObjectClass, UClass * RequiredMetaClass, const wchar_t * Text, unsigned int PortFlags, FUObjectSerializeContext * InSerializeContext, bool bAllowAnyPackage) Line 531 C++
[Inline Frame] UnrealEditor-CoreUObject.dll!IsObjectHandleNull(UE::CoreUObject::Private::FObjectHandlePrivate) Line 99 C++
[Inline Frame] UnrealEditor-CoreUObject.dll!FObjectPtr::operator bool() Line 187 C++
[Inline Frame] UnrealEditor-CoreUObject.dll!ObjectPtr_Private::IsObjectPtrNull(const FObjectPtr &) Line 397 C++
[Inline Frame] UnrealEditor-CoreUObject.dll!TObjectPtr<UObject>::operator==(void *) Line 620 C++
UnrealEditor-CoreUObject.dll!FObjectPropertyBase::ParseObjectPropertyValue(const FProperty * Property, UObject * OwnerObject, UClass * RequiredMetaClass, unsigned int PortFlags, const wchar_t * & Buffer, TObjectPtr<UObject> & out_ResolvedValue, FUObjectSerializeContext * InSerializeContext, bool bAllowAnyPackage) Line 394 C++
UnrealEditor-CoreUObject.dll!FObjectPropertyBase::ImportText_Internal(const wchar_t * InBuffer, void * ContainerOrPropertyPtr, EPropertyPointerType PropertyPointerType, UObject * Parent, int PortFlags, FOutputDevice * ErrorText) Line 426 C++
UnrealEditor-CoreUObject.dll!FObjectProperty::ImportText_Internal(const wchar_t * Buffer, void * ContainerOrPropertyPtr, EPropertyPointerType PropertyPointerType, UObject * OwnerObject, int PortFlags, FOutputDevice * ErrorText) Line 330 C++
[Inline Frame] UnrealEditor-CoreUObject.dll!FProperty::ImportText_Direct(const wchar_t * PortFlags, void *) Line 583 C++
UnrealEditor-CoreUObject.dll!FProperty::ImportSingleProperty(const wchar_t * Str, void * DestData, const UStruct * ObjectStruct, UObject * SubobjectOuter, int PortFlags, FOutputDevice * Warn, TArray<FDefinedProperty,TSizedDefaultAllocator<32>> & DefinedProperties) Line 2088 C++
UnrealEditor-CoreUObject.dll!UScriptStruct::ImportText(const wchar_t * InBuffer, void * Value, UObject * OwnerObject, int PortFlags, FOutputDevice * ErrorText, const TFunctionRef<FString __cdecl(void)> & StructNameGetter, bool bAllowNativeOverride) Line 3301 C++
UnrealEditor-CoreUObject.dll!UScriptStruct::ImportText(const wchar_t * InBuffer, void * Value, UObject * OwnerObject, int PortFlags, FOutputDevice * ErrorText, const FString & StructName, bool bAllowNativeOverride) Line 3270 C++
UnrealEditor-BlueprintGraph.dll!UK2Node::FixupPinStringDataReferences(FArchive * SavingArchive) Line 246 C++
UnrealEditor-BlueprintGraph.dll!UK2Node::Serialize(FArchive & Ar) Line 133 C++
UnrealEditor-BlueprintGraph.dll!UK2Node_CallFunction::Serialize(FArchive & Ar) Line 2417 C++
UnrealEditor-Engine.dll!FArchiveGatherExternalActorRefs::operator<<(UObject * & Obj) Line 71 C++
UnrealEditor-CoreUObject.dll!FArchiveUObject::SerializeObjectPtr(FArchive & Ar, FObjectPtr & Value) Line 91 C++
UnrealEditor-Core.dll!FStructuredArchiveSlot::operator<<(FObjectPtr & Value) Line 288 C++
UnrealEditor-CoreUObject.dll!FObjectProperty::SerializeItem(FStructuredArchiveSlot Slot, void * Value, const void * Defaults) Line 183 C++
[Inline Frame] UnrealEditor-CoreUObject.dll!FArrayProperty::SerializeItem::__l2::<lambda_1>::operator()(FStructuredArchiveSlot) Line 232 C++
UnrealEditor-CoreUObject.dll!FArrayProperty::SerializeItem(FStructuredArchiveSlot Slot, void * Value, const void * Defaults) Line 762 C++
UnrealEditor-CoreUObject.dll!FPropertyTag::SerializeTaggedProperty(FStructuredArchiveSlot Slot, FProperty * Property, unsigned char * Value, const unsigned char * Defaults) Line 583 C++
UnrealEditor-CoreUObject.dll!UStruct::SerializeVersionedTaggedProperties(FStructuredArchiveSlot Slot, unsigned char * Data, UStruct * DefaultsStruct, unsigned char * Defaults, const UObject * BreakRecursionIfFullyLoad) Line 1998 C++
UnrealEditor-CoreUObject.dll!UStruct::SerializeTaggedProperties(FStructuredArchiveSlot Slot, unsigned char * Data, UStruct * DefaultsStruct, unsigned char * Defaults, const UObject * BreakRecursionIfFullyLoad) Line 1441 C++
UnrealEditor-CoreUObject.dll!UObject::SerializeScriptProperties(FStructuredArchiveSlot Slot) Line 1919 C++
UnrealEditor-CoreUObject.dll!UObject::Serialize(FStructuredArchiveRecord Record) Line 1697 C++
UnrealEditor-Engine.dll!UEdGraph::Serialize(FStructuredArchiveRecord Record) Line 154 C++
UnrealEditor-Engine.dll!UEdGraph::Serialize(FArchive & Ar) Line 259 C++
UnrealEditor-Engine.dll!FArchiveGatherExternalActorRefs::operator<<(UObject * & Obj) Line 71 C++
UnrealEditor-CoreUObject.dll!FArchiveUObject::SerializeObjectPtr(FArchive & Ar, FObjectPtr & Value) Line 91 C++
UnrealEditor-Core.dll!FStructuredArchiveSlot::operator<<(FObjectPtr & Value) Line 288 C++
UnrealEditor-CoreUObject.dll!FObjectProperty::SerializeItem(FStructuredArchiveSlot Slot, void * Value, const void * Defaults) Line 183 C++
[Inline Frame] UnrealEditor-CoreUObject.dll!FArrayProperty::SerializeItem::__l2::<lambda_1>::operator()(FStructuredArchiveSlot) Line 232 C++
UnrealEditor-CoreUObject.dll!FArrayProperty::SerializeItem(FStructuredArchiveSlot Slot, void * Value, const void * Defaults) Line 762 C++
UnrealEditor-CoreUObject.dll!FPropertyTag::SerializeTaggedProperty(FStructuredArchiveSlot Slot, FProperty * Property, unsigned char * Value, const unsigned char * Defaults) Line 583 C++
UnrealEditor-CoreUObject.dll!UStruct::SerializeVersionedTaggedProperties(FStructuredArchiveSlot Slot, unsigned char * Data, UStruct * DefaultsStruct, unsigned char * Defaults, const UObject * BreakRecursionIfFullyLoad) Line 1998 C++
UnrealEditor-CoreUObject.dll!UStruct::SerializeTaggedProperties(FStructuredArchiveSlot Slot, unsigned char * Data, UStruct * DefaultsStruct, unsigned char * Defaults, const UObject * BreakRecursionIfFullyLoad) Line 1441 C++
UnrealEditor-CoreUObject.dll!UObject::SerializeScriptProperties(FStructuredArchiveSlot Slot) Line 1919 C++
UnrealEditor-CoreUObject.dll!UObject::Serialize(FStructuredArchiveRecord Record) Line 1697 C++
UnrealEditor-CoreUObject.dll!UObject::Serialize(FArchive & Ar) Line 1570 C++
UnrealEditor-Engine.dll!UBlueprintCore::Serialize(FArchive & Ar) Line 277 C++
UnrealEditor-Engine.dll!UBlueprint::Serialize(FArchive & Ar) Line 428 C++
UnrealEditor-Engine.dll!FArchiveGatherExternalActorRefs::operator<<(UObject * & Obj) Line 71 C++
UnrealEditor-CoreUObject.dll!FArchiveUObject::SerializeObjectPtr(FArchive & Ar, FObjectPtr & Value) Line 91 C++
UnrealEditor-Core.dll!FStructuredArchiveSlot::operator<<(FObjectPtr & Value) Line 288 C++
UnrealEditor-CoreUObject.dll!FObjectProperty::SerializeItem(FStructuredArchiveSlot Slot, void * Value, const void * Defaults) Line 183 C++
UnrealEditor-CoreUObject.dll!FPropertyTag::SerializeTaggedProperty(FStructuredArchiveSlot Slot, FProperty * Property, unsigned char * Value, const unsigned char * Defaults) Line 583 C++
UnrealEditor-CoreUObject.dll!UStruct::SerializeVersionedTaggedProperties(FStructuredArchiveSlot Slot, unsigned char * Data, UStruct * DefaultsStruct, unsigned char * Defaults, const UObject * BreakRecursionIfFullyLoad) Line 1998 C++
UnrealEditor-CoreUObject.dll!UStruct::SerializeTaggedProperties(FStructuredArchiveSlot Slot, unsigned char * Data, UStruct * DefaultsStruct, unsigned char * Defaults, const UObject * BreakRecursionIfFullyLoad) Line 1441 C++
UnrealEditor-CoreUObject.dll!UObject::SerializeScriptProperties(FStructuredArchiveSlot Slot) Line 1919 C++
UnrealEditor-CoreUObject.dll!UObject::Serialize(FStructuredArchiveRecord Record) Line 1697 C++
UnrealEditor-CoreUObject.dll!UObject::Serialize(FArchive & Ar) Line 1570 C++
UnrealEditor-Engine.dll!ULevel::Serialize(FArchive & Ar) Line 598 C++
UnrealEditor-Engine.dll!FArchiveGatherExternalActorRefs::operator<<(UObject * & Obj) Line 71 C++
UnrealEditor-CoreUObject.dll!FArchiveUObject::SerializeObjectPtr(FArchive & Ar, FObjectPtr & Value) Line 91 C++
[Inline Frame] UnrealEditor-Engine.dll!ObjectPtr_Private::Friend::Serialize(FArchive &) Line 761 C++
[Inline Frame] UnrealEditor-Engine.dll!operator<<(FArchive &) Line 839 C++
UnrealEditor-Engine.dll!UWorld::Serialize(FArchive & Ar) Line 692 C++
[Inline Frame] UnrealEditor-Engine.dll!FArchiveGatherExternalActorRefs::

{ctor}

(UObject * InRoot, EObjectFlags InRequiredFlags, bool bInRecursive, TSet<ActorsReferencesUtils::FActorReference,FArchiveGatherExternalActorRefs::FActorReferenceKeyFuncs,FDefaultSetAllocator> &) Line 50 C++
UnrealEditor-Engine.dll!ActorsReferencesUtils::GetActorReferences(const ActorsReferencesUtils::FGetActorReferencesParams & InParams) Line 165 C++
UnrealEditor-Engine.dll!UWorldPartition::AppendAssetRegistryTags(FAssetRegistryTagsContext Context) Line 2094 C++
UnrealEditor-Engine.dll!UWorld::GetAssetRegistryTags(FAssetRegistryTagsContext Context) Line 9282 C++
UnrealEditor-CoreUObject.dll!UE::AssetRegistry::WritePackageData(UE::AssetRegistry::FWritePackageDataArgs & Args) Line 2544 C++
UnrealEditor-CoreUObject.dll!`anonymous namespace'::WritePackageHeader(FStructuredArchiveRecord & StructuredArchiveRoot, FSaveContext & SaveContext) Line 2008 C++
UnrealEditor-CoreUObject.dll!`anonymous namespace'::SaveHarvestedRealms(FSaveContext & SaveContext, ESaveRealm HarvestingContextToSave) Line 2854 C++
UnrealEditor-CoreUObject.dll!`anonymous namespace'::InnerSave(FSaveContext & SaveContext) Line 3093 C++
UnrealEditor-CoreUObject.dll!UPackage::Save2(UPackage * InPackage, UObject * InAsset, const wchar_t * InFilename, const FSavePackageArgs & SaveArgs) Line 3237 C++
UnrealEditor-CoreUObject.dll!UPackage::Save(UPackage * InOuter, UObject * InAsset, const wchar_t * Filename, const FSavePackageArgs & SaveArgs) Line 20 C++
UnrealEditor-UnrealEd.dll!UEditorEngine::Save(UPackage * InOuter, UObject * InAsset, const wchar_t * Filename, const FSavePackageArgs & InSaveArgs) Line 4428 C++
UnrealEditor-UnrealEd.dll!UEditorEngine::SavePackage(UPackage * InOuter, UObject * InAsset, const wchar_t * Filename, const FSavePackageArgs & SaveArgs) Line 4437 C++
UnrealEditor-UnrealEd.dll!UEditorEngine::Exec_Obj(const wchar_t * Str, FOutputDevice & Ar) Line 4659 C++
UnrealEditor-UnrealEd.dll!UEditorEngine::Exec_Editor(UWorld * InWorld, const wchar_t * Stream, FOutputDevice & Ar) Line 5732 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 5027 C++
UnrealEditor-UnrealEd.dll!UUnrealEdEngine::Exec(UWorld * InWorld, const wchar_t * Stream, FOutputDevice & Ar) Line 662 C++
UnrealEditor-UnrealEd.dll!SaveWorld(UWorld * World, const FString * ForceFilename, const wchar_t * OverridePath, const wchar_t * FilenamePrefix, bool bRenamePackageToFile, bool bCheckDirty, FString & FinalFilename, bool bAutosaving, bool bPIESaving) Line 953 C++
UnrealEditor-UnrealEd.dll!FEditorFileUtils::SaveMap(UWorld * InWorld, const FString & Filename) Line 3042 C++
UnrealEditor-UnrealEd.dll!InternalSavePackage(UPackage * PackageToSave, bool bUseDialog, bool & bOutPackageLocallyWritable, FOutputDevice & SaveOutput) Line 3563 C++
UnrealEditor-UnrealEd.dll!InternalPromptForCheckoutAndSave(const TArray<UPackage *,TSizedDefaultAllocator<32>> & FinalSaveList, bool bUseDialog, TArray<UPackage *,TSizedDefaultAllocator<32>> & OutFailedPackages) Line 4216 C++
UnrealEditor-UnrealEd.dll!FEditorFileUtils::PromptForCheckoutAndSave(const TArray<UPackage *,TSizedDefaultAllocator<32>> & InPackages, FEditorFileUtils::FPromptForCheckoutAndSaveParams & InOutParams) Line 4610 C++
UnrealEditor-UnrealEd.dll!FEditorFileUtils::PromptForCheckoutAndSave(const TArray<UPackage *,TSizedDefaultAllocator<32>> & InPackages, bool bCheckDirty, bool bPromptToSave, TArray<UPackage *,TSizedDefaultAllocator<32>> * OutFailedPackages, bool bAlreadyCheckedOut, bool bCanBeDeclined) Line 4689 C++
UnrealEditor-UnrealEd.dll!FAssetEditorToolkit::SaveAsset_Execute() Line 690 C++
[Inline Frame] UnrealEditor-UnrealEd.dll!Invoke(void(FAssetEditorToolkit::*)()) Line 66 C++
[Inline Frame] UnrealEditor-UnrealEd.dll!UE::Core::Private::Tuple::TTupleBase<TIntegerSequence<unsigned int>>::ApplyAfter(void(FAssetEditorToolkit::*)() &) Line 317 C++
UnrealEditor-UnrealEd.dll!V::TBaseSPMethodDelegateInstance::ExecuteIfSafe() Line 299 C++
[Inline Frame] UnrealEditor-Slate.dll!TDelegate<void __cdecl(void),FDefaultDelegateUserPolicy>::ExecuteIfBound() Line 634 C++
UnrealEditor-Slate.dll!FUIAction::Execute() Line 139 C++
UnrealEditor-Slate.dll!FUICommandList::ExecuteAction(const TSharedRef<FUICommandInfo const ,1> InUICommandInfo) Line 117 C++
UnrealEditor-Slate.dll!SToolBarButtonBlock::OnClicked() Line 496 C++
[Inline Frame] UnrealEditor-Slate.dll!Invoke(FReply(SToolBarButtonBlock::*)()) Line 66 C++
[Inline Frame] UnrealEditor-Slate.dll!UE::Core::Private::Tuple::TTupleBase<TIntegerSequence<unsigned int>>::ApplyAfter(FReply(SToolBarButtonBlock::*)() &) Line 317 C++
UnrealEditor-Slate.dll!V::TBaseSPMethodDelegateInstance::Execute() Line 282 C++
[Inline Frame] UnrealEditor-Slate.dll!TDelegate<FReply __cdecl(void),FDefaultDelegateUserPolicy>::Execute() Line 613 C++
UnrealEditor-Slate.dll!SButton::ExecuteOnClick() Line 467 C++
UnrealEditor-Slate.dll!SButton::OnMouseButtonUp(const FGeometry & MyGeometry, const FPointerEvent & MouseEvent) Line 392 C++
UnrealEditor-Slate.dll!??R<lambda_2>@?7??RoutePointerUpEvent@FSlateApplication@@QEAA?AVFReply@@AEBVFWidgetPath@@AEBUFPointerEvent@@@Z@QEBA@AEBVFArrangedWidget@@1@Z(const FArrangedWidget & TargetWidget, const FPointerEvent & Event) Line 5346 C++
UnrealEditor-Slate.dll!??$Route@VFReply@@VFToLeafmostPolicy@FEventRouter@@UFPointerEvent@@V<lambda_2>@?7??RoutePointerUpEvent@FSlateApplication@@QEAA?AV1@AEBVFWidgetPath@@AEBU4@@Z@@FEventRouter@@SA?AVFReply@@PEAVFSlateApplication@@VFToLeafmostPolicy@0@UFPointerEvent@@AEBV<lambda_2>@?7??RoutePointerUpEvent@2@QEAA?AV1@AEBVFWidgetPath@@AEBU4@@Z@W4ESlateDebuggingInputEvent@@@Z(FSlateApplication * ThisApplication, FEventRouter::FToLeafmostPolicy RoutingPolicy, FPointerEvent EventCopy, const FSlateApplication::RoutePointerUpEvent::__l8::<lambda_2> & Lambda, ESlateDebuggingInputEvent DebuggingInputEvent) Line 456 C++
UnrealEditor-Slate.dll!FSlateApplication::RoutePointerUpEvent(const FWidgetPath & WidgetsUnderPointer, const FPointerEvent & PointerEvent) Line 5332 C++
UnrealEditor-Slate.dll!FSlateApplication::ProcessMouseButtonUpEvent(const FPointerEvent & MouseEvent) Line 5917 C++
UnrealEditor-Slate.dll!FSlateApplication::OnMouseUp(const EMouseButtons::Type Button, const UE::Math::TVector2<double> CursorPos) Line 5873 C++
UnrealEditor-ApplicationCore.dll!FWindowsApplication::ProcessDeferredMessage(const FDeferredWindowsMessage & DeferredMessage) Line 2271 C++
UnrealEditor-ApplicationCore.dll!FWindowsApplication::DeferMessage(TSharedPtr<FWindowsWindow,1> & NativeWindow, HWND__ * InHWnd, unsigned int InMessage, unsigned __int64 InWParam, __int64 InLParam, int MouseX, int MouseY, unsigned int RawInputFlags) Line 2783 C++
UnrealEditor-ApplicationCore.dll!FWindowsApplication::ProcessMessage(HWND__ * hwnd, unsigned int msg, unsigned __int64 wParam, __int64 lParam) Line 1944 C++
[Inline Frame] UnrealEditor-ApplicationCore.dll!WindowsApplication_WndProc(HWND__ *) Line 939 C++
UnrealEditor-ApplicationCore.dll!FWindowsApplication::AppWndProc(HWND__ * hwnd, unsigned int msg, unsigned __int64 wParam, __int64 lParam) Line 945 C++
[External Code]
[Inline Frame] UnrealEditor-ApplicationCore.dll!WinPumpMessages() Line 116 C++
UnrealEditor-ApplicationCore.dll!FWindowsPlatformApplicationMisc::PumpMessages(bool bFromMainLoop) Line 145 C++
UnrealEditor-Win64-DebugGame.exe!FEngineLoop::Tick() Line 5806 C++
[Inline Frame] UnrealEditor-Win64-DebugGame.exe!EngineTick() Line 69 C++
UnrealEditor-Win64-DebugGame.exe!GuardedMain(const wchar_t * CmdLine) Line 188 C++
UnrealEditor-Win64-DebugGame.exe!LaunchWindowsStartup(HINSTANCE__ * hInInstance, HINSTANCE__ * hPrevInstance, char * __formal, int nCmdShow, const wchar_t * CmdLine) Line 266 C++
UnrealEditor-Win64-DebugGame.exe!WinMain(HINSTANCE__ * hInInstance, HINSTANCE__ * hPrevInstance, char * pCmdLine, int nCmdShow) Line 317 C++
[External Code]

Have Comments or More Details?

There's no existing public thread on this issue, so head over to Questions & Answers just mention UE-250211 in the post.

0
Login to Vote

Unresolved
CreatedFeb 19, 2025
UpdatedFeb 28, 2025
View Jira Issue