in string.go [305:336]
func (d *Decoder) readStringChunkData(tag byte) ([]byte, error) {
charTotal, err := d.getStringLength(tag)
if err != nil {
return nil, perrors.WithStack(err)
}
data := make([]byte, charTotal*3)
start := 0
end := 0
charCount := 0
charRead := 0
for charCount < charTotal {
_, err = io.ReadFull(d.reader, data[end:end+charTotal-charCount])
if err != nil {
return nil, err
}
end += charTotal - charCount
start, end, charRead, err = decode2utf8(d.reader, data, start, end)
if err != nil {
return nil, err
}
charCount += charRead
}
return append([]byte(nil), data[:end]...), nil
}