Skip to content

Commit edaf511

Browse files
neildlfolger
authored andcommitted
internal/encoding/text: fix parsing of incomplete numbers
Fix a panic when parsing the incomplete negative number "- ". Fixes golang/protobuf#1530 Change-Id: Iba5e8ee68d5f7255c28f1a74f31beee36c9ed847 Reviewed-on: https://go-review.googlesource.com/c/protobuf/+/475995 Reviewed-by: Lasse Folger <[email protected]> Run-TryBot: Damien Neil <[email protected]>
1 parent fe5bc54 commit edaf511

File tree

3 files changed

+16
-3
lines changed

3 files changed

+16
-3
lines changed

encoding/prototext/decode_test.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -308,6 +308,11 @@ s_string: "谷歌"
308308
inputMessage: &pb3.Scalars{},
309309
inputText: "s_sfixed64: bad",
310310
wantErr: "invalid value for sfixed64",
311+
}, {
312+
desc: "incomplete number value",
313+
inputMessage: &pb3.Scalars{},
314+
inputText: `s_int32: - `,
315+
wantErr: "(line 1:10): invalid scalar value: -",
311316
}, {
312317
desc: "conformance: FloatFieldMaxValue",
313318
inputMessage: &pb2.Scalars{},

internal/encoding/text/decode_number.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -88,15 +88,15 @@ func parseNumber(input []byte) number {
8888
neg = true
8989
s = s[1:]
9090
size++
91-
if len(s) == 0 {
92-
return number{}
93-
}
9491
// Consume any whitespace or comments between the
9592
// negative sign and the rest of the number
9693
lenBefore := len(s)
9794
s = consume(s, 0)
9895
sep = lenBefore - len(s)
9996
size += sep
97+
if len(s) == 0 {
98+
return number{}
99+
}
100100
}
101101

102102
switch {

internal/encoding/text/decode_test.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -559,6 +559,14 @@ func TestDecoder(t *testing.T) {
559559
in: "- \t 123.321e6",
560560
want: []R{{E: "invalid field number: -123.321e6"}},
561561
},
562+
{
563+
in: "-",
564+
want: []R{{E: "invalid field name: -"}},
565+
},
566+
{
567+
in: "- ",
568+
want: []R{{E: "invalid field name: -"}},
569+
},
562570
{
563571
in: "- # negative\n 123",
564572
want: []R{{E: "invalid field number: -123"}},

0 commit comments

Comments
 (0)