A crash can occur when a member of a UStruct has a category with the "|" symbol and is trying to be displayed inside by the FDetailLayoutBuilderImpl class.
This happens when there is a UStruct member that has a subcategory. Example: UPROPERTY(Category="ParentCat|ChildCategory")
When these types of properties are displayed in a DetailsView, if any member is tickable, a FDetailTreeNode* member is created. For some reason, this tickable members can turn invalid, and this only happens in members that are inside subcategories. The data structure that manages this behavior is FDetailLayoutBuilderImpl::TickableNodes. The crash occurs inside FDetailLayoutBuilderImpl::Tick, as some nodes inside TickableNodes turn invalid.
With repro project:
1. Open the Repro project
2. Run the EditorUtilityWidget called EUMG_EditTestObject
Without Repro Project:
1- Create the mentioned UStruct with subcategories.
2- Display it inside a UPropertyViewBase object or a derived one like UDetailsView.
PureCallHandler() WindowsPlatformMisc.cpp:732 FDetailLayoutBuilderImpl::Tick(float) DetailLayoutBuilderImpl.cpp:1064 SDetailsViewBase::Tick(const FGeometry &, const double, const float) SDetailsViewBase.cpp:1318 SWidget::Paint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SWidget.cpp:1445 SCompoundWidget::OnPaint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SCompoundWidget.cpp:46 SBorder::OnPaint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SBorder.cpp:131 SWidget::Paint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SWidget.cpp:1579 SPanel::PaintArrangedChildren(const FPaintArgs &, const FArrangedChildren &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SPanel.cpp:33 SPanel::OnPaint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SPanel.cpp:15 SWidget::Paint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SWidget.cpp:1579 SCompoundWidget::OnPaint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SCompoundWidget.cpp:46 SObjectWidget::OnPaint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SObjectWidget.cpp:140 SWidget::Paint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SWidget.cpp:1579 SPanel::PaintArrangedChildren(const FPaintArgs &, const FArrangedChildren &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SPanel.cpp:33 SPanel::OnPaint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SPanel.cpp:15 SWidget::Paint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SWidget.cpp:1579 SCompoundWidget::OnPaint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SCompoundWidget.cpp:46 SBorder::OnPaint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SBorder.cpp:131 SWidget::Paint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SWidget.cpp:1579 SOverlay::OnPaint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SOverlay.cpp:209 SWidget::Paint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SWidget.cpp:1579 SPanel::PaintArrangedChildren(const FPaintArgs &, const FArrangedChildren &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SPanel.cpp:33 SPanel::OnPaint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SPanel.cpp:15 SWidget::Paint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SWidget.cpp:1579 SCompoundWidget::OnPaint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SCompoundWidget.cpp:46 SWidget::Paint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SWidget.cpp:1579 SPanel::PaintArrangedChildren(const FPaintArgs &, const FArrangedChildren &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SPanel.cpp:33 SSplitter::OnPaint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SSplitter.cpp:250 SWidget::Paint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SWidget.cpp:1579 SCompoundWidget::OnPaint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SCompoundWidget.cpp:46 SWidget::Paint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SWidget.cpp:1579 SPanel::PaintArrangedChildren(const FPaintArgs &, const FArrangedChildren &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SPanel.cpp:33 SSplitter::OnPaint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SSplitter.cpp:250 SWidget::Paint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SWidget.cpp:1579 SCompoundWidget::OnPaint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SCompoundWidget.cpp:46 SWidget::Paint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SWidget.cpp:1579 SPanel::PaintArrangedChildren(const FPaintArgs &, const FArrangedChildren &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SPanel.cpp:33 SSplitter::OnPaint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SSplitter.cpp:250 SWidget::Paint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SWidget.cpp:1579 SOverlay::OnPaint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SOverlay.cpp:209 SWidget::Paint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SWidget.cpp:1579 SPanel::PaintArrangedChildren(const FPaintArgs &, const FArrangedChildren &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SPanel.cpp:33 SPanel::OnPaint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SPanel.cpp:15 SWidget::Paint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SWidget.cpp:1579 SOverlay::OnPaint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SOverlay.cpp:209 SWidget::Paint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SWidget.cpp:1579 SCompoundWidget::OnPaint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SCompoundWidget.cpp:46 SWidget::Paint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SWidget.cpp:1579 SPanel::PaintArrangedChildren(const FPaintArgs &, const FArrangedChildren &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SPanel.cpp:33 SPanel::OnPaint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SPanel.cpp:15 SWidget::Paint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SWidget.cpp:1579 SCompoundWidget::OnPaint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SCompoundWidget.cpp:46 SWidget::Paint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SWidget.cpp:1579 SCompoundWidget::OnPaint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SCompoundWidget.cpp:46 SBorder::OnPaint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SBorder.cpp:131 SWidget::Paint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SWidget.cpp:1579 SOverlay::OnPaint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SOverlay.cpp:209 SWidget::Paint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SWidget.cpp:1579 SPanel::PaintArrangedChildren(const FPaintArgs &, const FArrangedChildren &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SPanel.cpp:33 SPanel::OnPaint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SPanel.cpp:15 SWidget::Paint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SWidget.cpp:1579 SCompoundWidget::OnPaint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SCompoundWidget.cpp:46 SWidget::Paint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SWidget.cpp:1579 SPanel::PaintArrangedChildren(const FPaintArgs &, const FArrangedChildren &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SPanel.cpp:33 SSplitter::OnPaint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SSplitter.cpp:250 SWidget::Paint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SWidget.cpp:1579 SOverlay::OnPaint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SOverlay.cpp:209 SWidget::Paint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SWidget.cpp:1579 SPanel::PaintArrangedChildren(const FPaintArgs &, const FArrangedChildren &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SPanel.cpp:33 SPanel::OnPaint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SPanel.cpp:15 SWidget::Paint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SWidget.cpp:1579 SOverlay::OnPaint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SOverlay.cpp:209 SWidget::Paint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SWidget.cpp:1579 SCompoundWidget::OnPaint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SCompoundWidget.cpp:46 SWidget::Paint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SWidget.cpp:1579 SPanel::PaintArrangedChildren(const FPaintArgs &, const FArrangedChildren &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SPanel.cpp:33 SPanel::OnPaint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SPanel.cpp:15 SWidget::Paint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SWidget.cpp:1579 SPanel::PaintArrangedChildren(const FPaintArgs &, const FArrangedChildren &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SPanel.cpp:33 SPanel::OnPaint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SPanel.cpp:15 SWidget::Paint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SWidget.cpp:1579 SOverlay::OnPaint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SOverlay.cpp:209 SWidget::Paint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SWidget.cpp:1579 SCompoundWidget::OnPaint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SCompoundWidget.cpp:46 SWidget::Paint(const FPaintArgs &, const FGeometry &, const FSlateRect &, FSlateWindowElementList &, int, const FWidgetStyle &, bool) SWidget.cpp:1579 SWindow::PaintSlowPath(const FSlateInvalidationContext &) SWindow.cpp:2081 FSlateInvalidationRoot::PaintInvalidationRoot(const FSlateInvalidationContext &) SlateInvalidationRoot.cpp:411 SWindow::PaintWindow(double, float, FSlateWindowElementList &, const FWidgetStyle &, bool) SWindow.cpp:2120 FSlateApplication::DrawWindowAndChildren(const TSharedRef<…> &, FDrawWindowArgs &) SlateApplication.cpp:1177 FSlateApplication::PrivateDrawWindows(TSharedPtr<…>) SlateApplication.cpp:1419 FSlateApplication::DrawWindows() SlateApplication.cpp:1121 FSlateApplication::TickAndDrawWidgets(float) SlateApplication.cpp:1721 FSlateApplication::Tick(ESlateTickType) SlateApplication.cpp:1574 FEngineLoop::Tick() LaunchEngineLoop.cpp:5994 [Inlined] EngineTick() Launch.cpp:69 GuardedMain(const wchar_t *) Launch.cpp:190 LaunchWindowsStartup(HINSTANCE__ *, HINSTANCE__ *, char *, int, const wchar_t *) LaunchWindows.cpp:266 WinMain(HINSTANCE__ *, HINSTANCE__ *, char *, int) LaunchWindows.cpp:317
How does TextureRenderTarget2D get TArray<uint8> type data?
Why does the REMOVE method of map container remove elements have memory leaks?
How do I set a material as a post-processing material?
How to delete some elements correctly when deleting an array loop?
What is the cause of the packaging error falling back to 'GameUserSettings' in ue5?
What is the difference between Camera and CineCamera?
UMG RichText not appear image when packaged
How does TArray loop correctly remove elements in blueprints?
There's no existing public thread on this issue, so head over to Questions & Answers just mention UE-232029 in the post.
0 |
Component | UE - Editor - Workflow Systems |
---|---|
Affects Versions | 5.4, 5.3, 5.5 |
Created | Dec 3, 2024 |
---|---|
Updated | Jan 17, 2025 |