When implementing a USceneComponent in C++, one may want to add one or more internal UObjects to hold some data or perform specific tasks (this is also done by several UE built-in components). These internal UObject properties can be decorated with "UPROPERTY(Instanced)", and their class with "UCLASS(EditInlineNew)", which allows them to be picked and configured directly from a Details Panel within the Editor. An internal UObject can itself contain a USTRUCT decorated with UPROPERTY(EditAnywhere), and editing its members directly within a Details Panel worked well in UE 5.2. However, in UE 5.3, editing the members of such a USTRUCT may trigger an access to an invalid address, which can crash the engine.
The invalid access seems to happen during UObject::PropagatePostEditChange() in [Engine\Source\Runtime\CoreUObject\Private\UObject\Obj.cpp:640]. On line 692, the call to ChangedProperty->Identical_InContainer() attempts to compare a (correct) pointer to the internal UObject and an (incorrect) pointer to its owner USceneComponent. The function then proceeds to access the memory location of the struct member offset from the wrong base address.
There's no existing public thread on this issue, so head over to Questions & Answers just mention UE-204807 in the post.
2 |
Component | UE - Editor |
---|---|
Affects Versions | 5.3.2 |
Target Fix | 5.4 |
Created | Jan 24, 2024 |
---|---|
Resolved | Feb 1, 2024 |
Updated | Jun 28, 2024 |