From 405201e4f9044fa9c46fe6ed8743fe9dac882730 Mon Sep 17 00:00:00 2001 From: Nao Yonashiro Date: Fri, 12 Feb 2021 18:13:07 +0900 Subject: [PATCH] fix: use stringDecoder for decode escaped string to empty interface --- decode_interface.go | 24 ++++++++---------------- 1 file changed, 8 insertions(+), 16 deletions(-) diff --git a/decode_interface.go b/decode_interface.go index bc4dadd..a46abe5 100644 --- a/decode_interface.go +++ b/decode_interface.go @@ -275,23 +275,15 @@ func (d *interfaceDecoder) decodeEmptyInterface(buf []byte, cursor int64, p unsa *(*interface{})(p) = v }).decode(buf, cursor, p) case '"': - cursor++ - start := cursor - for { - switch buf[cursor] { - case '\\': - cursor++ - continue - case '"': - literal := buf[start:cursor] - cursor++ - **(**interface{})(unsafe.Pointer(&p)) = *(*string)(unsafe.Pointer(&literal)) - return cursor, nil - case nul: - return 0, errUnexpectedEndOfJSON("string", cursor) - } - cursor++ + var v string + ptr := unsafe.Pointer(&v) + dec := newStringDecoder(d.structName, d.fieldName) + cursor, err := dec.decode(buf, cursor, ptr) + if err != nil { + return 0, err } + **(**interface{})(unsafe.Pointer(&p)) = v + return cursor, nil case 't': if cursor+3 >= int64(len(buf)) { return 0, errUnexpectedEndOfJSON("bool(true)", cursor)