data serialization ai_generated partial

Data corruption — Protobuf field number reused after deletion

ID: data/protobuf-field-number-reuse-corruption

Also available as: JSON · Markdown
70%Fix Rate
90%Confidence
4Evidence
2023-01-01First Seen

Version Compatibility

VersionStatusIntroducedDeprecatedNotes
any active

Root Cause

Reusing a deleted field number causes old serialized data to be deserialized with wrong types.

generic

Workarounds

  1. 95% success Mark deleted field numbers as reserved
    message Foo { reserved 2, 15; reserved "old_field"; }

    Sources: https://protobuf.dev/programming-guides/proto3/#reserved

  2. 90% success Always use the next available field number for new fields
    Never reuse field numbers. Keep a CHANGELOG of assignments

    Sources: https://protobuf.dev/programming-guides/proto3/#assigning

Dead Ends

Common approaches that don't work:

  1. Just delete the field and reuse the number 95% fail

    Old serialized data still uses that field number

  2. Rename the field but keep the same number 60% fail

    Field names are ignored in wire format; only the number matters