From 146f70ea8a293df4aa3235a76aa3ac6af2535ef5 Mon Sep 17 00:00:00 2001 From: Cameron Moore Date: Thu, 6 Jan 2022 13:34:27 -0600 Subject: [PATCH] Decode: use cleaned byte slice throughout parseFloat (#735) Fixes #734 --- decode.go | 4 ++-- unmarshaler_test.go | 5 +++++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/decode.go b/decode.go index 8c2bbac..60a6c66 100644 --- a/decode.go +++ b/decode.go @@ -309,10 +309,10 @@ func parseFloat(b []byte) (float64, error) { } start := 0 - if b[0] == '+' || b[0] == '-' { + if cleaned[0] == '+' || cleaned[0] == '-' { start = 1 } - if b[start] == '0' && isDigit(b[start+1]) { + if cleaned[start] == '0' && isDigit(cleaned[start+1]) { return 0, newDecodeError(b, "float integer part cannot have leading zeroes") } diff --git a/unmarshaler_test.go b/unmarshaler_test.go index 25336f0..08ceb3b 100644 --- a/unmarshaler_test.go +++ b/unmarshaler_test.go @@ -279,6 +279,11 @@ func TestUnmarshal_Floats(t *testing.T) { input: `1.0_e2`, err: true, }, + { + desc: "leading zero in positive float", + input: `+0_0.0`, + err: true, + }, } type doc struct {