summaryrefslogtreecommitdiff
path: root/reencode.go
diff options
context:
space:
mode:
Diffstat (limited to 'reencode.go')
-rw-r--r--reencode.go18
1 files changed, 15 insertions, 3 deletions
diff --git a/reencode.go b/reencode.go
index fd36875..c19e296 100644
--- a/reencode.go
+++ b/reencode.go
@@ -329,9 +329,21 @@ func (enc *ReEncoder) WriteRune(c rune) (n int, err error) {
// if enc.AllowMultipleValues is set.
func (enc *ReEncoder) Close() error {
if enc.bufLen > 0 {
- return &ReEncodeSyntaxError{
- Offset: enc.inputPos,
- Err: fmt.Errorf("%w: unflushed unicode garbage: %q", io.ErrUnexpectedEOF, enc.buf[:enc.bufLen]),
+ if enc.utf == InvalidUTF8Error {
+ return &ReEncodeSyntaxError{
+ Offset: enc.inputPos,
+ Err: fmt.Errorf("truncated UTF-8: %q", enc.buf[:enc.bufLen]),
+ }
+ }
+ for i := 0; i < enc.bufLen; i++ {
+ if enc.utf == InvalidUTF8Replace {
+ enc.handleRune(utf8.RuneError, 1, true)
+ } else {
+ enc.handleRune(rune(enc.buf[i]), 1, false)
+ }
+ if enc.err != nil {
+ return enc.err
+ }
}
}
if _, err := enc.par.HandleEOF(); err != nil {