1. Download the Licensee repro, compile, and open:
https://udn.unrealengine.com/s/contentdocument/069QP00000CdN7WYAV
2. Press the first hatched button on the top bar, next to the Platforms dropdown. Its tooltip is "Execute First Plugin Action"
3. Select any static mesh, for example /Engine/Content/BasicShapes/Cube
4. Observe that the first CRC checksum printed in the log is different from the rest.
CRC Checksums of UStaticMesh Objects are non-deterministic. An uninitialized variable is written into them, resulting in successive checksum calls potentially resulting in different values.
This behavior comes from the function "UStaticMesh::Serialize(...)", and the code:
```
// TODO: These should be gated with a version check, but not able to be done in this stream.
FString Deprecated_HighResSourceMeshName;
uint32 Deprecated_HighResSourceMeshCRC;
Ar << Deprecated_HighResSourceMeshName;
Ar << Deprecated_HighResSourceMeshCRC;
```
The variable "Deprecated_HighResSourceMeshCRC" should be initialized, because it can write garbage, non-deterministic data into the archive.
Also found in UE5-Main, CL: 34719970
There's no existing public thread on this issue, so head over to Questions & Answers just mention UE-219367 in the post.
0 |
Component | UE - Foundation |
---|---|
Affects Versions | 5.4, 5.4.2 |
Target Fix | 5.5 |
Fix Commit | 34903378 |
---|
Created | Jul 15, 2024 |
---|---|
Resolved | Jul 18, 2024 |
Updated | Oct 28, 2024 |