summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Shumaker <lukeshu@lukeshu.com>2022-07-31 18:56:15 -0600
committerLuke Shumaker <lukeshu@lukeshu.com>2022-07-31 19:08:12 -0600
commit0ee3e4eb97aba57735b1278e2afb3df5e7d7ee56 (patch)
tree51e1f34dc3965b09d191e2bbed200b847f73c257
parent216a09c3c167c5961d14e52c3415354fb2bfa998 (diff)
fix
-rw-r--r--lib/lowmemjson/adapter_test.go3
-rw-r--r--lib/lowmemjson/decode.go2
-rw-r--r--lib/lowmemjson/encode.go8
-rw-r--r--lib/lowmemjson/misc.go2
-rw-r--r--lib/lowmemjson/reencode.go1
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))