Description

Regression.

Function library saving crashes if it references to a string table entry.

 

Steps to Reproduce

Project repro has been attached for convenience.

  1. Open Unreal Engine Version 4.22 and create a new Blank Blueprint Project
  2. Create a string table with a single string entry.(Key: TEST String: Test.)
  3. Add & Save the String Table
  4. Create a Blueprint Function Library "BFL_Test"
  5. Create a "Test" Function which Outputs a Text.
  6. Select the string entry from the created String Table.
  7. Compile & Save.

Result: Editor Crash.

Expected: Successful Save.

Callstack

LoginId:677a448d48352201d90930b796056d79
EpicAccountId:74cb1785c0a148f0a87ef74601ae977a

Assertion failed: [Link Removed] [Line: 280] Illegal call to StaticFindObjectFast() while serializing object data or garbage collecting!

> UE4Editor-CoreUObject-Win64-Debug.dll!StaticFindObjectFast(UClass * ObjectClass, UObject * ObjectPackage, FName ObjectName, bool ExactClass, bool AnyPackage, EObjectFlags ExclusiveFlags, EInternalObjectFlags ExclusiveInternalFlags) Line 280 C++
UE4Editor-CoreUObject-Win64-Debug.dll!ResolveName(UObject * & InPackage, FString & InOutName, bool Create, bool Throw, unsigned int LoadFlags, FUObjectSerializeContext * InLoadContext) Line 748 C++
UE4Editor-CoreUObject-Win64-Debug.dll!StaticLoadObjectInternal(UClass * ObjectClass, UObject * InOuter, const wchar_t * InName, const wchar_t * Filename, unsigned int LoadFlags, UPackageMap * Sandbox, bool bAllowObjectReconciliation, FUObjectSerializeContext * InSerializeContext) Line 813 C++
UE4Editor-CoreUObject-Win64-Debug.dll!StaticLoadObject(UClass * ObjectClass, UObject * InOuter, const wchar_t * InName, const wchar_t * Filename, unsigned int LoadFlags, UPackageMap * Sandbox, bool bAllowObjectReconciliation, FUObjectSerializeContext * InSerializeContext) Line 888 C++
UE4Editor-CoreUObject-Win64-Debug.dll!FSoftObjectPath::TryLoad(FUObjectSerializeContext * InLoadContext) Line 353 C++
UE4Editor-Engine-Win64-Debug.dll!FStringTableEngineBridge::LoadStringTableAssetImpl(const FName InTableId, TFunction<void __cdecl(FName,FName)> InLoadedCallback) Line 196 C++
UE4Editor-Core-Win64-Debug.dll!IStringTableEngineBridge::LoadStringTableAsset(const FName InTableId, TFunction<void __cdecl(FName,FName)> InLoadedCallback) Line 192 C++
UE4Editor-Core-Win64-Debug.dll!FTextHistory_StringTableEntry::FStringTableReferenceData::ConditionalBeginAssetLoad() Line 2688 C++
UE4Editor-Core-Win64-Debug.dll!FTextHistory_StringTableEntry::FStringTableReferenceData::Initialize(unsigned short * InRevisionPtr, FName InTableId, FString && InKey, const EStringTableLoadingPolicy InLoadingPolicy) Line 2593 C++
UE4Editor-Core-Win64-Debug.dll!FTextHistory_StringTableEntry::ReadFromBuffer(const wchar_t * Buffer, const wchar_t * TextNamespace, const wchar_t * PackageNamespace, TSharedPtr<FString,1> & OutDisplayString) Line 2535 C++
UE4Editor-Core-Win64-Debug.dll!FTextStringHelper::ReadFromBuffer_ComplexText(const wchar_t * Buffer, FText & OutValue, const wchar_t * TextNamespace, const wchar_t * PackageNamespace) Line 1571 C++
UE4Editor-Core-Win64-Debug.dll!FTextStringHelper::ReadFromBuffer(const wchar_t * Buffer, FText & OutValue, const wchar_t * TextNamespace, const wchar_t * PackageNamespace, const bool bRequiresQuotes) Line 1605 C++
UE4Editor-Engine-Win64-Debug.dll!UEdGraphSchema::DoesDefaultValueMatchAutogenerated(const UEdGraphPin & InPin) Line 505 C++
UE4Editor-BlueprintGraph-Win64-Debug.dll!UEdGraphSchema_K2::DoesDefaultValueMatchAutogenerated(const UEdGraphPin & InPin) Line 4841 C++
UE4Editor-Engine-Win64-Debug.dll!UEdGraphPin::DoesDefaultValueMatchAutogenerated() Line 690 C++
UE4Editor-Engine-Win64-Debug.dll!`anonymous namespace'::GatherGraphNodeForLocalization(const UObject * const Object, FPropertyLocalizationDataGatherer & PropertyLocalizationDataGatherer, const EPropertyLocalizationGathererTextFlags GatherTextFlags) Line 136 C++
UE4Editor-Engine-Win64-Debug.dll!UE4Function_Private::TFunctionRefCaller<void (__cdecl*)(UObject const *,FPropertyLocalizationDataGatherer &,enum EPropertyLocalizationGathererTextFlags),void __cdecl(UObject const *,FPropertyLocalizationDataGatherer &,enum EPropertyLocalizationGathererTextFlags)>::Call(void * Obj, const UObject * & <Params_0>, FPropertyLocalizationDataGatherer & <Params_1>, EPropertyLocalizationGathererTextFlags & <Params_2>) Line 487 C++
UE4Editor-CoreUObject-Win64-Debug.dll!UE4Function_Private::TFunctionRefBase<UE4Function_Private::TFunctionStorage<0>,void __cdecl(UObject const *,FPropertyLocalizationDataGatherer &,enum EPropertyLocalizationGathererTextFlags)>::operator()(const UObject * <Params_0>, FPropertyLocalizationDataGatherer & <Params_1>, EPropertyLocalizationGathererTextFlags <Params_2>) Line 615 C++
UE4Editor-CoreUObject-Win64-Debug.dll!FPropertyLocalizationDataGatherer::GatherLocalizationDataFromObjectWithCallbacks(const UObject * Object, const EPropertyLocalizationGathererTextFlags GatherTextFlags) Line 95 C++
UE4Editor-CoreUObject-Win64-Debug.dll!FPropertyLocalizationDataGatherer::GatherLocalizationDataFromChildTextProperties(const FString & PathToParent, const UProperty * const Property, const void * const ValueAddress, const void * const DefaultValueAddress, const EPropertyLocalizationGathererTextFlags GatherTextFlags) Line 358 C++
UE4Editor-CoreUObject-Win64-Debug.dll!FPropertyLocalizationDataGatherer::GatherLocalizationDataFromChildTextProperties(const FString & PathToParent, const UProperty * const Property, const void * const ValueAddress, const void * const DefaultValueAddress, const EPropertyLocalizationGathererTextFlags GatherTextFlags) Line 282 C++
UE4Editor-CoreUObject-Win64-Debug.dll!FPropertyLocalizationDataGatherer::GatherLocalizationDataFromObjectFields(const FString & PathToParent, const UObject * Object, const EPropertyLocalizationGathererTextFlags GatherTextFlags) Line 167 C++
UE4Editor-CoreUObject-Win64-Debug.dll!FPropertyLocalizationDataGatherer::GatherLocalizationDataFromObject(const UObject * Object, const EPropertyLocalizationGathererTextFlags GatherTextFlags) Line 114 C++
UE4Editor-CoreUObject-Win64-Debug.dll!FPropertyLocalizationDataGatherer::GatherLocalizationDataFromObjectWithCallbacks(const UObject * Object, const EPropertyLocalizationGathererTextFlags GatherTextFlags) Line 101 C++
UE4Editor-CoreUObject-Win64-Debug.dll!FPropertyLocalizationDataGatherer::GatherLocalizationDataFromChildTextProperties(const FString & PathToParent, const UProperty * const Property, const void * const ValueAddress, const void * const DefaultValueAddress, const EPropertyLocalizationGathererTextFlags GatherTextFlags) Line 358 C++
UE4Editor-CoreUObject-Win64-Debug.dll!FPropertyLocalizationDataGatherer::GatherLocalizationDataFromChildTextProperties(const FString & PathToParent, const UProperty * const Property, const void * const ValueAddress, const void * const DefaultValueAddress, const EPropertyLocalizationGathererTextFlags GatherTextFlags) Line 282 C++
UE4Editor-CoreUObject-Win64-Debug.dll!FPropertyLocalizationDataGatherer::GatherLocalizationDataFromObjectFields(const FString & PathToParent, const UObject * Object, const EPropertyLocalizationGathererTextFlags GatherTextFlags) Line 167 C++
UE4Editor-CoreUObject-Win64-Debug.dll!FPropertyLocalizationDataGatherer::GatherLocalizationDataFromObject(const UObject * Object, const EPropertyLocalizationGathererTextFlags GatherTextFlags) Line 114 C++
UE4Editor-Engine-Win64-Debug.dll!`anonymous namespace'::GatherBlueprintForLocalization(const UObject * const Object, FPropertyLocalizationDataGatherer & PropertyLocalizationDataGatherer, const EPropertyLocalizationGathererTextFlags GatherTextFlags) Line 251 C++
UE4Editor-Engine-Win64-Debug.dll!UE4Function_Private::TFunctionRefCaller<void (__cdecl*)(UObject const *,FPropertyLocalizationDataGatherer &,enum EPropertyLocalizationGathererTextFlags),void __cdecl(UObject const *,FPropertyLocalizationDataGatherer &,enum EPropertyLocalizationGathererTextFlags)>::Call(void * Obj, const UObject * & <Params_0>, FPropertyLocalizationDataGatherer & <Params_1>, EPropertyLocalizationGathererTextFlags & <Params_2>) Line 487 C++
UE4Editor-CoreUObject-Win64-Debug.dll!UE4Function_Private::TFunctionRefBase<UE4Function_Private::TFunctionStorage<0>,void __cdecl(UObject const *,FPropertyLocalizationDataGatherer &,enum EPropertyLocalizationGathererTextFlags)>::operator()(const UObject * <Params_0>, FPropertyLocalizationDataGatherer & <Params_1>, EPropertyLocalizationGathererTextFlags <Params_2>) Line 615 C++
UE4Editor-CoreUObject-Win64-Debug.dll!FPropertyLocalizationDataGatherer::GatherLocalizationDataFromObjectWithCallbacks(const UObject * Object, const EPropertyLocalizationGathererTextFlags GatherTextFlags) Line 95 C++
UE4Editor-CoreUObject-Win64-Debug.dll!FPropertyLocalizationDataGatherer::FPropertyLocalizationDataGatherer(TArray<FGatherableTextData,FDefaultAllocator> & InOutGatherableTextDataArray, const UPackage * const InPackage, EPropertyLocalizationGathererResultFlags & OutResultFlags) Line 44 C++
UE4Editor-CoreUObject-Win64-Debug.dll!UPackage::Save(UPackage * InOuter, UObject * Base, EObjectFlags TopLevelFlags, const wchar_t * Filename, FOutputDevice * Error, FLinkerLoad * Conform, bool bForceByteSwapping, bool bWarnOfLongFilename, unsigned int SaveFlags, const ITargetPlatform * TargetPlatform, const FDateTime & FinalTimeStamp, bool bSlowTask, FArchiveDiffMap * InOutDiffMap) Line 4594 C++
UE4Editor-UnrealEd-Win64-Debug.dll!UEditorEngine::Save(UPackage * InOuter, UObject * InBase, EObjectFlags TopLevelFlags, const wchar_t * Filename, FOutputDevice * Error, FLinkerLoad * Conform, bool bForceByteSwapping, bool bWarnOfLongFilename, unsigned int SaveFlags, const ITargetPlatform * TargetPlatform, const FDateTime & FinalTimeStamp, bool bSlowTask, FArchiveDiffMap * InOutDiffMap) Line 4334 C++
UE4Editor-UnrealEd-Win64-Debug.dll!UEditorEngine::SavePackage(UPackage * InOuter, UObject * InBase, EObjectFlags TopLevelFlags, const wchar_t * Filename, FOutputDevice * Error, FLinkerLoad * Conform, bool bForceByteSwapping, bool bWarnOfLongFilename, unsigned int SaveFlags, const ITargetPlatform * TargetPlatform, const FDateTime & FinalTimeStamp, bool bSlowTask) Line 4389 C++
UE4Editor-UnrealEd-Win64-Debug.dll!UEditorEngine::Exec_Obj(const wchar_t * Str, FOutputDevice & Ar) Line 4473 C++
UE4Editor-UnrealEd-Win64-Debug.dll!UEditorEngine::Exec(UWorld * InWorld, const wchar_t * Stream, FOutputDevice & Ar) Line 5550 C++
UE4Editor-UnrealEd-Win64-Debug.dll!UUnrealEdEngine::Exec(UWorld * InWorld, const wchar_t * Stream, FOutputDevice & Ar) Line 691 C++
UE4Editor-UnrealEd-Win64-Debug.dll!InternalSavePackage(UPackage * PackageToSave, bool bUseDialog, bool & bOutPackageLocallyWritable, FOutputDevice & SaveOutput) Line 2958 C++
UE4Editor-UnrealEd-Win64-Debug.dll!InternalPromptForCheckoutAndSave(const TArray<UPackage *,FDefaultAllocator> & FinalSaveList, bool bUseDialog, TArray<UPackage *,FDefaultAllocator> & OutFailedPackages) Line 3464 C++
UE4Editor-UnrealEd-Win64-Debug.dll!FEditorFileUtils::PromptForCheckoutAndSave(const TArray<UPackage *,FDefaultAllocator> & InPackages, bool bCheckDirty, bool bPromptToSave, TArray<UPackage *,FDefaultAllocator> * OutFailedPackages, bool bAlreadyCheckedOut, bool bCanBeDeclined) Line 3729 C++
UE4Editor-UnrealEd-Win64-Debug.dll!FAssetEditorToolkit::SaveAsset_Execute() Line 531 C++
UE4Editor-UnrealEd-Win64-Debug.dll!TMemberFunctionCaller<FAssetEditorToolkit,void (__cdecl FAssetEditorToolkit::*)(void)>::operator()<>() Line 157 C++
UE4Editor-UnrealEd-Win64-Debug.dll!TBaseSPMethodDelegateInstance<0,FAssetEditorToolkit,0,TTypeWrapper<void> __cdecl(void)>::Execute() Line 279 C++
UE4Editor-UnrealEd-Win64-Debug.dll!TBaseSPMethodDelegateInstance<0,FAssetEditorToolkit,0,void __cdecl(void)>::ExecuteIfSafe() Line 357 C++
UE4Editor-Slate-Win64-Debug.dll!TBaseDelegate<void>::ExecuteIfBound() Line 648 C++
UE4Editor-Slate-Win64-Debug.dll!FUICommandList::ExecuteAction(const TSharedRef<FUICommandInfo const ,0> InUICommandInfo) Line 100 C++
UE4Editor-Slate-Win64-Debug.dll!SToolBarButtonBlock::OnClicked() Line 300 C++
UE4Editor-Slate-Win64-Debug.dll!TMemberFunctionCaller<SToolBarButtonBlock,FReply (__cdecl SToolBarButtonBlock::*)(void)>::operator()<>() Line 156 C++
UE4Editor-Slate-Win64-Debug.dll!TBaseSPMethodDelegateInstance<0,SToolBarButtonBlock,0,FReply __cdecl(void)>::Execute() Line 279 C++
UE4Editor-Slate-Win64-Debug.dll!SButton::OnMouseButtonUp(const FGeometry & MyGeometry, const FPointerEvent & MouseEvent) Line 294 C++
UE4Editor-Slate-Win64-Debug.dll!FSlateApplication::RoutePointerUpEvent::__l8::<lambda>(const FArrangedWidget & TargetWidget, const FPointerEvent & Event) Line 5611 C++
UE4Editor-Slate-Win64-Debug.dll!FEventRouter::Route<FReply,FEventRouter::FToLeafmostPolicy,FPointerEvent,FReply <lambda>(const FArrangedWidget &, const FPointerEvent &) >(FSlateApplication * ThisApplication, FEventRouter::FToLeafmostPolicy RoutingPolicy, FPointerEvent EventCopy, const FSlateApplication::RoutePointerUpEvent::__l8::FReply <lambda>(const FArrangedWidget &, const FPointerEvent &) & Lambda) Line 271 C++
UE4Editor-Slate-Win64-Debug.dll!FSlateApplication::RoutePointerUpEvent(const FWidgetPath & WidgetsUnderPointer, const FPointerEvent & PointerEvent) Line 5597 C++
UE4Editor-Slate-Win64-Debug.dll!FSlateApplication::ProcessMouseButtonUpEvent(const FPointerEvent & MouseEvent) Line 6202 C++
UE4Editor-Slate-Win64-Debug.dll!FSlateApplication::OnMouseUp(const EMouseButtons::Type Button, const FVector2D CursorPos) Line 6175 C++
UE4Editor-ApplicationCore-Win64-Debug.dll!FWindowsApplication::ProcessDeferredMessage(const FDeferredWindowsMessage & DeferredMessage) Line 1843 C++
UE4Editor-ApplicationCore-Win64-Debug.dll!FWindowsApplication::DeferMessage(TSharedPtr<FWindowsWindow,0> & NativeWindow, HWND__ * InHWnd, unsigned int InMessage, unsigned __int64 InWParam, __int64 InLParam, int MouseX, int MouseY, unsigned int RawInputFlags) Line 2295 C++
UE4Editor-ApplicationCore-Win64-Debug.dll!FWindowsApplication::ProcessMessage(HWND__ * hwnd, unsigned int msg, unsigned __int64 wParam, __int64 lParam) Line 943 C++
UE4Editor-ApplicationCore-Win64-Debug.dll!FWindowsApplication::AppWndProc(HWND__ * hwnd, unsigned int msg, unsigned __int64 wParam, __int64 lParam) Line 772 C++
user32.dll!UserCallWinProcCheckWow() Unknown
user32.dll!DispatchMessageWorker() Unknown
UE4Editor-ApplicationCore-Win64-Debug.dll!WinPumpMessages() Line 108 C++
UE4Editor-ApplicationCore-Win64-Debug.dll!FWindowsPlatformApplicationMisc::PumpMessages(bool bFromMainLoop) Line 133 C++
UE4Editor-Win64-Debug.exe!FEngineLoop::Tick() Line 3955 C++
UE4Editor-Win64-Debug.exe!EngineTick() Line 63 C++
UE4Editor-Win64-Debug.exe!GuardedMain(const wchar_t * CmdLine, HINSTANCE__ * hInInstance, HINSTANCE__ * hPrevInstance, int nCmdShow) Line 176 C++
UE4Editor-Win64-Debug.exe!WinMain(HINSTANCE__ * hInInstance, HINSTANCE__ * hPrevInstance, char * __formal, int nCmdShow) Line 261 C++
[Inline Frame] UE4Editor-Win64-Debug.exe!invoke_main() Line 102 C++
UE4Editor-Win64-Debug.exe!__scrt_common_main_seh() Line 288 C++
kernel32.dll!BaseThreadInitThunk() Unknown
ntdll.dll!RtlUserThreadStart() Unknown

Have Comments or More Details?

There's no existing public thread on this issue, so head over toAnswerHub just mention UE-72314 in the post.

1
Login to Vote

Fixed
ComponentTools - Localization
Affects Versions4.22
Target Fix4.22.1
Fix Commit5745720
CreatedApr 4, 2019
ResolvedApr 4, 2019
UpdatedApr 17, 2019