data
serialization
ai_generated
partial
Data corruption — Protobuf field number reused after deletion
ID: data/protobuf-field-number-reuse-corruption
70%Fix Rate
90%Confidence
4Evidence
2023-01-01First Seen
Version Compatibility
| Version | Status | Introduced | Deprecated | Notes |
|---|---|---|---|---|
| any | active | — | — | — |
Root Cause
Reusing a deleted field number causes old serialized data to be deserialized with wrong types.
genericWorkarounds
-
95% success Mark deleted field numbers as reserved
message Foo { reserved 2, 15; reserved "old_field"; }Sources: https://protobuf.dev/programming-guides/proto3/#reserved
-
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:
-
Just delete the field and reuse the number
95% fail
Old serialized data still uses that field number
-
Rename the field but keep the same number
60% fail
Field names are ignored in wire format; only the number matters