Skip to content

Slow restore path doesn't handle deleted or moved properties #126

@cyphusx

Description

@cyphusx

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions