From 0ee3e4eb97aba57735b1278e2afb3df5e7d7ee56 Mon Sep 17 00:00:00 2001 From: Luke Shumaker Date: Sun, 31 Jul 2022 18:56:15 -0600 Subject: fix --- lib/lowmemjson/adapter_test.go | 3 ++- lib/lowmemjson/decode.go | 2 +- lib/lowmemjson/encode.go | 8 +++++--- lib/lowmemjson/misc.go | 2 +- lib/lowmemjson/reencode.go | 1 + 5 files changed, 10 insertions(+), 6 deletions(-) diff --git a/lib/lowmemjson/adapter_test.go b/lib/lowmemjson/adapter_test.go index 630c7ca..ffdc2ee 100644 --- a/lib/lowmemjson/adapter_test.go +++ b/lib/lowmemjson/adapter_test.go @@ -5,8 +5,8 @@ package lowmemjson import ( + "bufio" "bytes" -"bufio" "encoding/json" "io" ) @@ -98,6 +98,7 @@ func (dec *_Decoder) More() bool { _, ok := peekRuneOrEOF(dec.src) return ok } + //func (dec *_Decoder) Token() (Token, error) ///////////////////////////////////////////////////////////////////// diff --git a/lib/lowmemjson/decode.go b/lib/lowmemjson/decode.go index 6726ca8..4873d43 100644 --- a/lib/lowmemjson/decode.go +++ b/lib/lowmemjson/decode.go @@ -419,8 +419,8 @@ func decodeArray(r io.RuneScanner, decodeMember func()) { case ']': return default: - decodeNextMember: unreadRune(r) + decodeNextMember: decodeMember() decodeWS(r) c := readRune(r) diff --git a/lib/lowmemjson/encode.go b/lib/lowmemjson/encode.go index 1d79e07..ca3d406 100644 --- a/lib/lowmemjson/encode.go +++ b/lib/lowmemjson/encode.go @@ -183,9 +183,11 @@ func encode(w io.Writer, val reflect.Value, quote bool) { } } case reflect.Interface: - // .Kind() will only be reflect.Interface if - // there's no concrete type. - encodeWriteString(w, "null") + if val.IsNil() { + encodeWriteString(w, "null") + } else { + encode(w, val.Elem(), quote) + } case reflect.Struct: encodeWriteByte(w, '{') empty := true diff --git a/lib/lowmemjson/misc.go b/lib/lowmemjson/misc.go index b9dbb9b..132d441 100644 --- a/lib/lowmemjson/misc.go +++ b/lib/lowmemjson/misc.go @@ -75,7 +75,7 @@ func UnicodeEscapeHTMLSafe(c rune, wasEscaped bool) bool { func UnicodeEscapeDefault(c rune, wasEscaped bool) bool { switch c { - case '\b', '\f': + case '\b', '\f', utf8.RuneError: return true default: return UnicodeEscapeHTMLSafe(c, wasEscaped) diff --git a/lib/lowmemjson/reencode.go b/lib/lowmemjson/reencode.go index e0783b0..ebca619 100644 --- a/lib/lowmemjson/reencode.go +++ b/lib/lowmemjson/reencode.go @@ -588,6 +588,7 @@ func (enc *ReEncoder) _stateInLiteral(c rune, full string) error { } enc.stateBuf = append(enc.stateBuf, byte(c)) if len(enc.stateBuf) == len(full) { + enc.stateBuf = enc.stateBuf[:0] enc.popState() } return enc.emitByte(byte(c)) -- cgit v1.2.3-2-g168b