mirror of
https://github.com/protocolbuffers/protobuf-go.git
synced 2025-03-08 19:14:05 +00:00
internal/encoding/text: fix error construction in parseTypeName
Fuzz test caught the following issue -- https://oss-fuzz.com/testcase-detail/6288731021770752 Change-Id: Idcbce7953b465d1b83c01b1d123c9d43907d402a Reviewed-on: https://go-review.googlesource.com/c/protobuf/+/218037 Reviewed-by: Joe Tsai <thebrokentoaster@gmail.com>
This commit is contained in:
parent
40cba14b26
commit
2eb18f0e62
@ -449,7 +449,7 @@ func (d *Decoder) parseTypeName() (Token, error) {
|
||||
case s[0] == '/', s[0] == '.':
|
||||
if len(name) > 0 && (name[len(name)-1] == '/' || name[len(name)-1] == '.') {
|
||||
return Token{}, d.newSyntaxError("invalid type URL/extension field name: %s",
|
||||
d.in[startPos:len(d.orig)-len(s)+1])
|
||||
d.orig[startPos:len(d.orig)-len(s)+1])
|
||||
}
|
||||
name = append(name, s[0])
|
||||
s = s[1:]
|
||||
@ -462,7 +462,7 @@ func (d *Decoder) parseTypeName() (Token, error) {
|
||||
|
||||
default:
|
||||
return Token{}, d.newSyntaxError(
|
||||
"invalid type URL/extension field name: %s", d.in[startPos:len(d.orig)-len(s)+1])
|
||||
"invalid type URL/extension field name: %s", d.orig[startPos:len(d.orig)-len(s)+1])
|
||||
}
|
||||
}
|
||||
|
||||
@ -474,7 +474,7 @@ func (d *Decoder) parseTypeName() (Token, error) {
|
||||
size := len(name)
|
||||
if size == 0 || name[0] == '.' || name[size-1] == '.' || name[size-1] == '/' {
|
||||
return Token{}, d.newSyntaxError("invalid type URL/extension field name: %s",
|
||||
d.in[startPos:len(d.orig)-len(s)])
|
||||
d.orig[startPos:len(d.orig)-len(s)])
|
||||
}
|
||||
|
||||
d.in = s
|
||||
|
@ -461,6 +461,30 @@ func TestDecoder(t *testing.T) {
|
||||
in: "[proto.package/]",
|
||||
want: []R{{E: "invalid type URL/extension field name: [proto.package/"}},
|
||||
},
|
||||
{
|
||||
in: `message_field{[bad@]`,
|
||||
want: []R{
|
||||
{K: text.Name},
|
||||
{K: text.MessageOpen},
|
||||
{E: `invalid type URL/extension field name: [bad@`},
|
||||
},
|
||||
},
|
||||
{
|
||||
in: `message_field{[invalid//type]`,
|
||||
want: []R{
|
||||
{K: text.Name},
|
||||
{K: text.MessageOpen},
|
||||
{E: `invalid type URL/extension field name: [invalid//`},
|
||||
},
|
||||
},
|
||||
{
|
||||
in: `message_field{[proto.package.]`,
|
||||
want: []R{
|
||||
{K: text.Name},
|
||||
{K: text.MessageOpen},
|
||||
{E: `invalid type URL/extension field name: [proto.package.`},
|
||||
},
|
||||
},
|
||||
{
|
||||
in: "[proto.package",
|
||||
want: []R{{E: eofErr}},
|
||||
@ -1538,7 +1562,8 @@ m: {
|
||||
for _, tc := range tests {
|
||||
t.Run("", func(t *testing.T) {
|
||||
tc := tc
|
||||
dec := text.NewDecoder([]byte(tc.in))
|
||||
in := []byte(tc.in)
|
||||
dec := text.NewDecoder(in[:len(in):len(in)])
|
||||
for i, want := range tc.want {
|
||||
peekTok, peekErr := dec.Peek()
|
||||
tok, err := dec.Read()
|
||||
|
Loading…
x
Reference in New Issue
Block a user