mirror of
https://github.com/protocolbuffers/protobuf-go.git
synced 2024-12-27 15:26:51 +00:00
proto, internal/impl: reject invalid field numbers in map items
Change-Id: I44a44a36538f6f8b94078b43711d865edb6244f5 Reviewed-on: https://go-review.googlesource.com/c/protobuf/+/212257 Reviewed-by: Herbie Ong <herbie@google.com>
This commit is contained in:
parent
2c0824b512
commit
f2427c09d6
@ -5,6 +5,7 @@
|
||||
package impl
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"reflect"
|
||||
"sort"
|
||||
|
||||
@ -120,6 +121,9 @@ func consumeMap(b []byte, mapv reflect.Value, wtyp wire.Type, mapi *mapInfo, opt
|
||||
if n < 0 {
|
||||
return 0, wire.ParseError(n)
|
||||
}
|
||||
if num > wire.MaxValidNumber {
|
||||
return 0, errors.New("invalid field number")
|
||||
}
|
||||
b = b[n:]
|
||||
err := errUnknown
|
||||
switch num {
|
||||
@ -169,6 +173,9 @@ func consumeMapOfMessage(b []byte, mapv reflect.Value, wtyp wire.Type, mapi *map
|
||||
if n < 0 {
|
||||
return 0, wire.ParseError(n)
|
||||
}
|
||||
if num > wire.MaxValidNumber {
|
||||
return 0, errors.New("invalid field number")
|
||||
}
|
||||
b = b[n:]
|
||||
err := errUnknown
|
||||
switch num {
|
||||
|
@ -183,6 +183,9 @@ func (o UnmarshalOptions) unmarshalMap(b []byte, wtyp wire.Type, mapv protorefle
|
||||
if n < 0 {
|
||||
return 0, wire.ParseError(n)
|
||||
}
|
||||
if num > wire.MaxValidNumber {
|
||||
return 0, errors.New("invalid field number")
|
||||
}
|
||||
b = b[n:]
|
||||
err = errUnknown
|
||||
switch num {
|
||||
|
@ -1608,4 +1608,15 @@ var testInvalidMessages = []testProto{
|
||||
pack.Tag{pack.MaxValidNumber + 1, pack.VarintType}, pack.Varint(1008),
|
||||
}.Marshal(),
|
||||
},
|
||||
{
|
||||
desc: "invalid field number in map",
|
||||
decodeTo: []proto.Message{(*testpb.TestAllTypes)(nil)},
|
||||
wire: pack.Message{
|
||||
pack.Tag{56, pack.BytesType}, pack.LengthPrefix(pack.Message{
|
||||
pack.Tag{1, pack.VarintType}, pack.Varint(1056),
|
||||
pack.Tag{2, pack.VarintType}, pack.Varint(1156),
|
||||
pack.Tag{pack.MaxValidNumber + 1, pack.VarintType}, pack.Varint(0),
|
||||
}),
|
||||
}.Marshal(),
|
||||
},
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user