Description

When trying to add an entry to a TMap in a nested struct that is an element of an array the engine crashes. This doesn't happen if it is not an array of the nested struct.

Attached are .h and .cpp files that will demonstrate the behavior.

Reproduced in 4.23 CL#8386587

Steps to Reproduce

1. Create a new cpp project.
2. Create a new cpp derived from actor (CustomActorC).
3. Declare an enum (EMyEnum) with at least 1 entry.
4. Declare a struct (FMyInnerStruct)
     a. Use USTRUCT(BlueprintType)
     b. Declare a TMap of type (EMyEnum, int32) that uses UPROPERTY(EditAnywhere, BlueprintReadWrite)
5. Declare another struct (FMyOuterStruct)
     a. Use USTRUCT(BlueprintType)
     b. Declare a FMyInnerStruct (innerStructInst) that uses UPROPERTY(EditDefaultsOnly, BlueprintReadWrite)
6. Create a blueprint derived from CustomActorC.
7. Add an entry into the TMap in 'ArrayOfOuterStructs.InnerStructsInst.TestTMap' inside the new blueprint.

Results: The engine crashes.

Expected: The TMap is populated like normal.

Callstack

LoginId:9a8d08644d702ac44f074090ac311686
EpicAccountId:580fb2844ad145d79dff08f42acea7c6

Unhandled exception

UE4Editor_PropertyEditor!FPropertyNode::GetDiffersFromDefaultForObject() [d:\build\++ue4\sync\engine\source\editor\propertyeditor\private\propertynode.cpp:1589]
UE4Editor_PropertyEditor!FPropertyNode::GetDiffersFromDefault() [d:\build\++ue4\sync\engine\source\editor\propertyeditor\private\propertynode.cpp:1667]
UE4Editor_PropertyEditor!FPropertyHandleBase::DiffersFromDefault() [d:\build\++ue4\sync\engine\source\editor\propertyeditor\private\propertyhandleimpl.cpp:2160]
UE4Editor_PropertyEditor!FPropertyHandleBase::CanResetToDefault() [d:\build\++ue4\sync\engine\source\editor\propertyeditor\private\propertyhandleimpl.cpp:3115]
UE4Editor_PropertyEditor!SResetToDefaultPropertyEditor::UpdateDiffersFromDefaultState() [d:\build\++ue4\sync\engine\source\editor\propertyeditor\private\userinterface\propertyeditor\sresettodefaultpropertyeditor.cpp:103]
UE4Editor_PropertyEditor!SResetToDefaultPropertyEditor::Construct() [d:\build\++ue4\sync\engine\source\editor\propertyeditor\private\userinterface\propertyeditor\sresettodefaultpropertyeditor.cpp:46]
UE4Editor_PropertyEditor!TDecl<SResetToDefaultPropertyEditor,RequiredArgs::T1RequiredArgs<TSharedRef<IPropertyHandle,0> &&> >::operator<<=() [d:\build\++ue4\sync\engine\source\runtime\slatecore\public\widgets\declarativesyntaxsupport.h:1116]
UE4Editor_PropertyEditor!FDetailPropertyRow::MakeValueWidget() [d:\build\++ue4\sync\engine\source\editor\propertyeditor\private\detailpropertyrow.cpp:717]
UE4Editor_PropertyEditor!FDetailPropertyRow::GetWidgetRow() [d:\build\++ue4\sync\engine\source\editor\propertyeditor\private\detailpropertyrow.cpp:199]
UE4Editor_PropertyEditor!FDetailLayoutCustomization::GetWidgetRow() [d:\build\++ue4\sync\engine\source\editor\propertyeditor\private\detailcategorybuilderimpl.cpp:97]
UE4Editor_PropertyEditor!SDetailSingleItemRow::Construct() [d:\build\++ue4\sync\engine\source\editor\propertyeditor\private\sdetailsingleitemrow.cpp:286]
UE4Editor_PropertyEditor!TDecl<SDetailSingleItemRow,RequiredArgs::T4RequiredArgs<FDetailLayoutCustomization * &&,bool &&,TSharedRef<FDetailItemNode,0> &&,TSharedRef<STableViewBase,0> const &> >::operator<<=() [d:\build\++ue4\sync\engine\source\runtime\slatecore\public\widgets\declarativesyntaxsupport.h:1116]
UE4Editor_PropertyEditor!FDetailItemNode::GenerateWidgetForTableView() [d:\build\++ue4\sync\engine\source\editor\propertyeditor\private\detailitemnode.cpp:233]
UE4Editor_PropertyEditor!SDetailsViewBase::OnGenerateRowForDetailTree() [d:\build\++ue4\sync\engine\source\editor\propertyeditor\private\sdetailsviewbase.cpp:41]
UE4Editor_PropertyEditor!TBaseSPMethodDelegateInstance<0,SDetailsView,0,TSharedRef<ITableRow,0> __cdecl(TSharedRef<FDetailTreeNode,0>,TSharedRef<STableViewBase,0> const &)>::Execute() [d:\build\++ue4\sync\engine\source\runtime\core\public\delegates\delegateinstancesimpl.h:293]
UE4Editor_PropertyEditor!STreeView<TSharedRef<FDetailTreeNode,0> >::GenerateNewWidget() [d:\build\++ue4\sync\engine\source\runtime\slate\public\widgets\views\streeview.h:658]
UE4Editor_PropertyEditor!SListView<TSharedRef<FDetailTreeNode,0> >::GenerateWidgetForItem() [d:\build\++ue4\sync\engine\source\runtime\slate\public\widgets\views\slistview.h:1096]
UE4Editor_PropertyEditor!SListView<TSharedRef<FDetailTreeNode,0> >::ReGenerateItems() [d:\build\++ue4\sync\engine\source\runtime\slate\public\widgets\views\slistview.h:1001]
UE4Editor_Slate!STableViewBase::Tick() [d:\build\++ue4\sync\engine\source\runtime\slate\private\widgets\views\stableviewbase.cpp:249]
UE4Editor_PropertyEditor!STreeView<TSharedRef<FDetailTreeNode,0> >::Tick() [d:\build\++ue4\sync\engine\source\runtime\slate\public\widgets\views\streeview.h:558]
UE4Editor_SlateCore!SWidget::Paint() [d:\build\++ue4\sync\engine\source\runtime\slatecore\private\widgets\swidget.cpp:1049]
UE4Editor_SlateCore!SOverlay::OnPaint() [d:\build\++ue4\sync\engine\source\runtime\slatecore\private\widgets\soverlay.cpp:95]
UE4Editor_SlateCore!SWidget::Paint() [d:\build\++ue4\sync\engine\source\runtime\slatecore\private\widgets\swidget.cpp:1088]
UE4Editor_SlateCore!SPanel::PaintArrangedChildren() [d:\build\++ue4\sync\engine\source\runtime\slatecore\private\widgets\spanel.cpp:31]
UE4Editor_SlateCore!SPanel::OnPaint() [d:\build\++ue4\sync\engine\source\runtime\slatecore\private\widgets\spanel.cpp:12]
UE4Editor_SlateCore!SWidget::Paint() [d:\build\++ue4\sync\engine\source\runtime\slatecore\private\widgets\swidget.cpp:1088]
UE4Editor_SlateCore!SCompoundWidget::OnPaint() [d:\build\++ue4\sync\engine\source\runtime\slatecore\private\widgets\scompoundwidget.cpp:35]
UE4Editor_SlateCore!SWidget::Paint() [d:\build\++ue4\sync\engine\source\runtime\slatecore\private\widgets\swidget.cpp:1088]
UE4Editor_SlateCore!SPanel::PaintArrangedChildren() [d:\build\++ue4\sync\engine\source\runtime\slatecore\private\widgets\spanel.cpp:31]
UE4Editor_SlateCore!SPanel::OnPaint() [d:\build\++ue4\sync\engine\source\runtime\slatecore\private\widgets\spanel.cpp:12]
UE4Editor_SlateCore!SWidget::Paint() [d:\build\++ue4\sync\engine\source\runtime\slatecore\private\widgets\swidget.cpp:1088]
UE4Editor_Slate!SBox::OnPaint() [d:\build\++ue4\sync\engine\source\runtime\slate\private\widgets\layout\sbox.cpp:330]
UE4Editor_SlateCore!SWidget::Paint() [d:\build\++ue4\sync\engine\source\runtime\slatecore\private\widgets\swidget.cpp:1088]
UE4Editor_SlateCore!SPanel::PaintArrangedChildren() [d:\build\++ue4\sync\engine\source\runtime\slatecore\private\widgets\spanel.cpp:31]
UE4Editor_SlateCore!SPanel::OnPaint() [d:\build\++ue4\sync\engine\source\runtime\slatecore\private\widgets\spanel.cpp:12]
UE4Editor_SlateCore!SWidget::Paint() [d:\build\++ue4\sync\engine\source\runtime\slatecore\private\widgets\swidget.cpp:1088]
UE4Editor_SlateCore!SCompoundWidget::OnPaint() [d:\build\++ue4\sync\engine\source\runtime\slatecore\private\widgets\scompoundwidget.cpp:35]
UE4Editor_Slate!SBorder::OnPaint() [d:\build\++ue4\sync\engine\source\runtime\slate\private\widgets\layout\sborder.cpp:119]
UE4Editor_SlateCore!SWidget::Paint() [d:\build\++ue4\sync\engine\source\runtime\slatecore\private\widgets\swidget.cpp:1088]
UE4Editor_SlateCore!SPanel::PaintArrangedChildren() [d:\build\++ue4\sync\engine\source\runtime\slatecore\private\widgets\spanel.cpp:31]
UE4Editor_SlateCore!SPanel::OnPaint() [d:\build\++ue4\sync\engine\source\runtime\slatecore\private\widgets\spanel.cpp:12]
UE4Editor_SlateCore!SWidget::Paint() [d:\build\++ue4\sync\engine\source\runtime\slatecore\private\widgets\swidget.cpp:1088]
UE4Editor_SlateCore!SCompoundWidget::OnPaint() [d:\build\++ue4\sync\engine\source\runtime\slatecore\private\widgets\scompoundwidget.cpp:35]
UE4Editor_SlateCore!SWidget::Paint() [d:\build\++ue4\sync\engine\source\runtime\slatecore\private\widgets\swidget.cpp:1088]
UE4Editor_SlateCore!SPanel::PaintArrangedChildren() [d:\build\++ue4\sync\engine\source\runtime\slatecore\private\widgets\spanel.cpp:31]
UE4Editor_SlateCore!SPanel::OnPaint() [d:\build\++ue4\sync\engine\source\runtime\slatecore\private\widgets\spanel.cpp:12]
UE4Editor_SlateCore!SWidget::Paint() [d:\build\++ue4\sync\engine\source\runtime\slatecore\private\widgets\swidget.cpp:1088]
UE4Editor_SlateCore!SCompoundWidget::OnPaint() [d:\build\++ue4\sync\engine\source\runtime\slatecore\private\widgets\scompoundwidget.cpp:35]
UE4Editor_Slate!SBorder::OnPaint() [d:\build\++ue4\sync\engine\source\runtime\slate\private\widgets\layout\sborder.cpp:119]
UE4Editor_SlateCore!SWidget::Paint() [d:\build\++ue4\sync\engine\source\runtime\slatecore\private\widgets\swidget.cpp:1088]
UE4Editor_SlateCore!SOverlay::OnPaint() [d:\build\++ue4\sync\engine\source\runtime\slatecore\private\widgets\soverlay.cpp:95]
UE4Editor_SlateCore!SWidget::Paint() [d:\build\++ue4\sync\engine\source\runtime\slatecore\private\widgets\swidget.cpp:1088]
UE4Editor_SlateCore!SPanel::PaintArrangedChildren() [d:\build\++ue4\sync\engine\source\runtime\slatecore\private\widgets\spanel.cpp:31]
UE4Editor_SlateCore!SPanel::OnPaint() [d:\build\++ue4\sync\engine\source\runtime\slatecore\private\widgets\spanel.cpp:12]
UE4Editor_SlateCore!SWidget::Paint() [d:\build\++ue4\sync\engine\source\runtime\slatecore\private\widgets\swidget.cpp:1088]
UE4Editor_SlateCore!SCompoundWidget::OnPaint() [d:\build\++ue4\sync\engine\source\runtime\slatecore\private\widgets\scompoundwidget.cpp:35]
UE4Editor_SlateCore!SWidget::Paint() [d:\build\++ue4\sync\engine\source\runtime\slatecore\private\widgets\swidget.cpp:1088]
UE4Editor_SlateCore!SPanel::PaintArrangedChildren() [d:\build\++ue4\sync\engine\source\runtime\slatecore\private\widgets\spanel.cpp:31]
UE4Editor_Slate!SSplitter::OnPaint() [d:\build\++ue4\sync\engine\source\runtime\slate\private\widgets\layout\ssplitter.cpp:164]
UE4Editor_SlateCore!SWidget::Paint() [d:\build\++ue4\sync\engine\source\runtime\slatecore\private\widgets\swidget.cpp:1088]
UE4Editor_SlateCore!SOverlay::OnPaint() [d:\build\++ue4\sync\engine\source\runtime\slatecore\private\widgets\soverlay.cpp:95]
UE4Editor_SlateCore!SWidget::Paint() [d:\build\++ue4\sync\engine\source\runtime\slatecore\private\widgets\swidget.cpp:1088]
UE4Editor_SlateCore!SCompoundWidget::OnPaint() [d:\build\++ue4\sync\engine\source\runtime\slatecore\private\widgets\scompoundwidget.cpp:35]
UE4Editor_SlateCore!SWidget::Paint() [d:\build\++ue4\sync\engine\source\runtime\slatecore\private\widgets\swidget.cpp:1088]
UE4Editor_SlateCore!SPanel::PaintArrangedChildren() [d:\build\++ue4\sync\engine\source\runtime\slatecore\private\widgets\spanel.cpp:31]
UE4Editor_SlateCore!SPanel::OnPaint() [d:\build\++ue4\sync\engine\source\runtime\slatecore\private\widgets\spanel.cpp:12]
UE4Editor_SlateCore!SWidget::Paint() [d:\build\++ue4\sync\engine\source\runtime\slatecore\private\widgets\swidget.cpp:1088]
UE4Editor_SlateCore!SCompoundWidget::OnPaint() [d:\build\++ue4\sync\engine\source\runtime\slatecore\private\widgets\scompoundwidget.cpp:35]
UE4Editor_SlateCore!SWidget::Paint() [d:\build\++ue4\sync\engine\source\runtime\slatecore\private\widgets\swidget.cpp:1088]
UE4Editor_SlateCore!SCompoundWidget::OnPaint() [d:\build\++ue4\sync\engine\source\runtime\slatecore\private\widgets\scompoundwidget.cpp:35]
UE4Editor_Slate!SBorder::OnPaint() [d:\build\++ue4\sync\engine\source\runtime\slate\private\widgets\layout\sborder.cpp:119]
UE4Editor_SlateCore!SWidget::Paint() [d:\build\++ue4\sync\engine\source\runtime\slatecore\private\widgets\swidget.cpp:1088]
UE4Editor_SlateCore!SOverlay::OnPaint() [d:\build\++ue4\sync\engine\source\runtime\slatecore\private\widgets\soverlay.cpp:95]
UE4Editor_SlateCore!SWidget::Paint() [d:\build\++ue4\sync\engine\source\runtime\slatecore\private\widgets\swidget.cpp:1088]
UE4Editor_SlateCore!SPanel::PaintArrangedChildren() [d:\build\++ue4\sync\engine\source\runtime\slatecore\private\widgets\spanel.cpp:31]
UE4Editor_SlateCore!SPanel::OnPaint() [d:\build\++ue4\sync\engine\source\runtime\slatecore\private\widgets\spanel.cpp:12]
UE4Editor_SlateCore!SWidget::Paint() [d:\build\++ue4\sync\engine\source\runtime\slatecore\private\widgets\swidget.cpp:1088]
UE4Editor_SlateCore!SCompoundWidget::OnPaint() [d:\build\++ue4\sync\engine\source\runtime\slatecore\private\widgets\scompoundwidget.cpp:35]
UE4Editor_SlateCore!SWidget::Paint() [d:\build\++ue4\sync\engine\source\runtime\slatecore\private\widgets\swidget.cpp:1088]
UE4Editor_SlateCore!SPanel::PaintArrangedChildren() [d:\build\++ue4\sync\engine\source\runtime\slatecore\private\widgets\spanel.cpp:31]
UE4Editor_Slate!SSplitter::OnPaint() [d:\build\++ue4\sync\engine\source\runtime\slate\private\widgets\layout\ssplitter.cpp:164]
UE4Editor_SlateCore!SWidget::Paint() [d:\build\++ue4\sync\engine\source\runtime\slatecore\private\widgets\swidget.cpp:1088]
UE4Editor_SlateCore!SOverlay::OnPaint() [d:\build\++ue4\sync\engine\source\runtime\slatecore\private\widgets\soverlay.cpp:95]
UE4Editor_SlateCore!SWidget::Paint() [d:\build\++ue4\sync\engine\source\runtime\slatecore\private\widgets\swidget.cpp:1088]
UE4Editor_SlateCore!SCompoundWidget::OnPaint() [d:\build\++ue4\sync\engine\source\runtime\slatecore\private\widgets\scompoundwidget.cpp:35]
UE4Editor_SlateCore!SWidget::Paint() [d:\build\++ue4\sync\engine\source\runtime\slatecore\private\widgets\swidget.cpp:1088]
UE4Editor_SlateCore!SPanel::PaintArrangedChildren() [d:\build\++ue4\sync\engine\source\runtime\slatecore\private\widgets\spanel.cpp:31]
UE4Editor_SlateCore!SPanel::OnPaint() [d:\build\++ue4\sync\engine\source\runtime\slatecore\private\widgets\spanel.cpp:12]
UE4Editor_SlateCore!SWidget::Paint() [d:\build\++ue4\sync\engine\source\runtime\slatecore\private\widgets\swidget.cpp:1088]
UE4Editor_SlateCore!SPanel::PaintArrangedChildren() [d:\build\++ue4\sync\engine\source\runtime\slatecore\private\widgets\spanel.cpp:31]
UE4Editor_SlateCore!SPanel::OnPaint() [d:\build\++ue4\sync\engine\source\runtime\slatecore\private\widgets\spanel.cpp:12]
UE4Editor_SlateCore!SWidget::Paint() [d:\build\++ue4\sync\engine\source\runtime\slatecore\private\widgets\swidget.cpp:1088]
UE4Editor_SlateCore!SOverlay::OnPaint() [d:\build\++ue4\sync\engine\source\runtime\slatecore\private\widgets\soverlay.cpp:95]
UE4Editor_SlateCore!SWidget::Paint() [d:\build\++ue4\sync\engine\source\runtime\slatecore\private\widgets\swidget.cpp:1088]
UE4Editor_SlateCore!SCompoundWidget::OnPaint() [d:\build\++ue4\sync\engine\source\runtime\slatecore\private\widgets\scompoundwidget.cpp:35]
UE4Editor_SlateCore!SWindow::OnPaint() [d:\build\++ue4\sync\engine\source\runtime\slatecore\private\widgets\swindow.cpp:1948]
UE4Editor_SlateCore!SWidget::Paint() [d:\build\++ue4\sync\engine\source\runtime\slatecore\private\widgets\swidget.cpp:1088]
UE4Editor_SlateCore!SWindow::PaintWindow() [d:\build\++ue4\sync\engine\source\runtime\slatecore\private\widgets\swindow.cpp:1939]
UE4Editor_Slate!FSlateApplication::DrawWindowAndChildren() [d:\build\++ue4\sync\engine\source\runtime\slate\private\framework\application\slateapplication.cpp:1322]
UE4Editor_Slate!FSlateApplication::PrivateDrawWindows() [d:\build\++ue4\sync\engine\source\runtime\slate\private\framework\application\slateapplication.cpp:1596]
UE4Editor_Slate!FSlateApplication::DrawWindows() [d:\build\++ue4\sync\engine\source\runtime\slate\private\framework\application\slateapplication.cpp:1279]
UE4Editor_Slate!FSlateApplication::TickApplication() [d:\build\++ue4\sync\engine\source\runtime\slate\private\framework\application\slateapplication.cpp:1881]
UE4Editor_Slate!FSlateApplication::Tick() [d:\build\++ue4\sync\engine\source\runtime\slate\private\framework\application\slateapplication.cpp:1712]
UE4Editor!FEngineLoop::Tick() [d:\build\++ue4\sync\engine\source\runtime\launch\private\launchengineloop.cpp:4361]
UE4Editor!GuardedMain() [d:\build\++ue4\sync\engine\source\runtime\launch\private\launch.cpp:173]
UE4Editor!GuardedMainWrapper() [d:\build\++ue4\sync\engine\source\runtime\launch\private\windows\launchwindows.cpp:147]
UE4Editor!WinMain() [d:\build\++ue4\sync\engine\source\runtime\launch\private\windows\launchwindows.cpp:279]
UE4Editor!__scrt_common_main_seh() [d:\agent\_work\1\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:288]
kernel32
ntdll

Have Comments or More Details?

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

4
Login to Vote

Fixed
ComponentTools
Affects Versions4.23
Target Fix4.23.1
Fix Commit8692233
Main Commit9409247
CreatedOct 3, 2019
ResolvedOct 3, 2019
UpdatedOct 4, 2019