encoding/textpb: ignore reserved field names during unmarshal
Do not treat reserved field names as unknown. Skip over these instead
of returning error for unknown field.
Change-Id: Iba9371fd901a0690e5b7329bccf261570352b55d
Reviewed-on: https://go-review.googlesource.com/c/154178
Reviewed-by: Joe Tsai <thebrokentoaster@gmail.com>
diff --git a/encoding/textpb/decode.go b/encoding/textpb/decode.go
index 656133f..7ee73ee 100644
--- a/encoding/textpb/decode.go
+++ b/encoding/textpb/decode.go
@@ -79,6 +79,7 @@
msgType := m.Type()
fieldDescs := msgType.Fields()
+ reservedNames := msgType.ReservedNames()
knownFields := m.KnownFields()
var reqNums set.Ints
var seenNums set.Ints
@@ -88,12 +89,16 @@
tval := tfield[1]
var fd pref.FieldDescriptor
- if name, ok := tkey.Name(); ok {
+ name, ok := tkey.Name()
+ if ok {
fd = fieldDescs.ByName(name)
}
if fd == nil {
+ // Ignore reserved names.
+ if reservedNames.Has(name) {
+ continue
+ }
// TODO: Can provide option to ignore unknown message fields.
- // TODO: Simply ignore and skip reserved field names.
return errors.New("%v contains unknown field: %v", msgType.FullName(), tkey)
}