From a48cad84884a964047d031055d996f1f96af9f46 Mon Sep 17 00:00:00 2001 From: Yi Duan Date: Thu, 8 Sep 2022 16:16:38 +0800 Subject: [PATCH] fix:(decoder) more loose repeatable condition for `StreamDecoder` (#296) --- decoder/stream.go | 2 +- issue_test/issue293_test.go | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/decoder/stream.go b/decoder/stream.go index 32c11cd..06dc818 100644 --- a/decoder/stream.go +++ b/decoder/stream.go @@ -127,7 +127,7 @@ read_more: func (self StreamDecoder) repeatable(err error) bool { if ee, ok := err.(SyntaxError); ok && - (ee.Code == types.ERR_EOF || (ee.Code == types.ERR_INVALID_CHAR && self.i == len(self.s)-1)) { + (ee.Code == types.ERR_EOF || (ee.Code == types.ERR_INVALID_CHAR && self.i >= len(self.s)-1)) { return true } return false diff --git a/issue_test/issue293_test.go b/issue_test/issue293_test.go index eb1ca76..28660cf 100644 --- a/issue_test/issue293_test.go +++ b/issue_test/issue293_test.go @@ -35,4 +35,20 @@ func TestIssue293(t *testing.T) { if err != nil { t.Fatal(err) } +} + +func TestIssue293Sign(t *testing.T) { + left := `{"a":` + var data = left+strings.Repeat(" ", 4096 - len(left)-1) + "-33.0}" + sd := decoder.NewStreamDecoder(strings.NewReader(data)) + var v = struct{ + A json.RawMessage + }{} + err := sd.Decode(&v) + if err != nil { + if e, ok := err.(decoder.SyntaxError); ok { + t.Fatal(e.Description()) + } + t.Fatal(err) + } } \ No newline at end of file