Decode: ensure signed exponents don't start with an underscore (#699)
This commit is contained in:
@@ -465,6 +465,10 @@ func checkAndRemoveUnderscoresFloats(b []byte) ([]byte, error) {
|
|||||||
return nil, newDecodeError(b[i+1:i+2], "cannot have underscore before exponent")
|
return nil, newDecodeError(b[i+1:i+2], "cannot have underscore before exponent")
|
||||||
}
|
}
|
||||||
before = false
|
before = false
|
||||||
|
case '+', '-':
|
||||||
|
// signed exponents
|
||||||
|
cleaned = append(cleaned, c)
|
||||||
|
before = false
|
||||||
case 'e', 'E':
|
case 'e', 'E':
|
||||||
if i < len(b)-1 && b[i+1] == '_' {
|
if i < len(b)-1 && b[i+1] == '_' {
|
||||||
return nil, newDecodeError(b[i+1:i+2], "cannot have underscore after exponent")
|
return nil, newDecodeError(b[i+1:i+2], "cannot have underscore after exponent")
|
||||||
|
|||||||
@@ -2317,6 +2317,14 @@ func TestUnmarshalDecodeErrors(t *testing.T) {
|
|||||||
desc: "number with negative sign and leading underscore",
|
desc: "number with negative sign and leading underscore",
|
||||||
data: `a = -_0`,
|
data: `a = -_0`,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
desc: "exponent with plus sign and leading underscore",
|
||||||
|
data: `a = 0e+_0`,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
desc: "exponent with negative sign and leading underscore",
|
||||||
|
data: `a = 0e-_0`,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
desc: "int with wrong base",
|
desc: "int with wrong base",
|
||||||
data: `a = 0f2`,
|
data: `a = 0f2`,
|
||||||
|
|||||||
Reference in New Issue
Block a user