-
Notifications
You must be signed in to change notification settings - Fork 82
Description
The USpudState::RestoreSlowPropertyVisitor::VisitProperty method currently attempts to handle serialized properties that have since been deleted or moved, by looking up their stored definition by name. As it's the slow path, the order in which the properties are visited is expected to not be the same as the order in which they were stored. However, even though we get the property definitions in a non-sequential order, the stored property data DataIn is always read from sequentially - causing corruption.
In the case of a property being deleted, it is never encountered by the visitor as that iterates over the properties of the runtime class, and hence due to the fact that the data is always read from sequentially, all properties that are visited after the point that the deleted property would have been visited, become corrupted.
When storing object properties, SPUD stores the offsets in the property data for each of the stored properties - the assumption is that this is then to be used to ensure that during a slow restore it is possible to skip to the correct point in the property data for each property. However it appears that those offsets are never used during the restore.
I am going to start to look at updating the slow restore path to use these offsets, but I thought I would raise the issue here first in order to see if I was missing something.