updated dependencies and moved to new rendering

This commit is contained in:
ston1th 2020-11-12 22:54:50 +01:00
commit 0a55030ae5
467 changed files with 64111 additions and 111050 deletions

View file

@ -123,6 +123,9 @@ func (e errWrapped) Resumable() bool {
return resumableDefault
}
// Unwrap returns the cause.
func (e errWrapped) Unwrap() error { return e.cause }
type errShort struct{}
func (e errShort) Error() string { return "msgp: too few bytes left to read object" }

View file

@ -474,8 +474,8 @@ func AppendExtension(b []byte, e Extension) ([]byte, error) {
// and returns any remaining bytes.
// Possible errors:
// - ErrShortBytes ('b' not long enough)
// - ExtensionTypeErorr{} (wire type not the same as e.Type())
// - TypeErorr{} (next object not an extension)
// - ExtensionTypeError{} (wire type not the same as e.Type())
// - TypeError{} (next object not an extension)
// - InvalidPrefixError
// - An umarshal error returned from e.UnmarshalBinary
func ReadExtensionBytes(b []byte, e Extension) ([]byte, error) {

View file

@ -206,7 +206,7 @@ func rwFloat32(dst jsWriter, src *Reader) (int, error) {
if err != nil {
return 0, err
}
src.scratch = strconv.AppendFloat(src.scratch[:0], float64(f), 'f', -1, 64)
src.scratch = strconv.AppendFloat(src.scratch[:0], float64(f), 'f', -1, 32)
return dst.Write(src.scratch)
}
@ -215,7 +215,7 @@ func rwFloat64(dst jsWriter, src *Reader) (int, error) {
if err != nil {
return 0, err
}
src.scratch = strconv.AppendFloat(src.scratch[:0], f, 'f', -1, 32)
src.scratch = strconv.AppendFloat(src.scratch[:0], f, 'f', -1, 64)
return dst.Write(src.scratch)
}
@ -466,7 +466,23 @@ func rwquoted(dst jsWriter, s []byte) (n int, err error) {
return
}
n++
case '\t':
err = dst.WriteByte('\\')
if err != nil {
return
}
n++
err = dst.WriteByte('t')
if err != nil {
return
}
n++
default:
// This encodes bytes < 0x20 except for \t, \n and \r.
// It also escapes <, >, and &
// because they can lead to security holes when
// user-controlled strings are rendered into JSON
// and served to some browsers.
nn, err = dst.WriteString(`\u00`)
n += nn
if err != nil {
@ -495,16 +511,23 @@ func rwquoted(dst jsWriter, s []byte) (n int, err error) {
if err != nil {
return
}
nn, err = dst.WriteString(`\ufffd`)
n += nn
if err != nil {
return
}
i += size
start = i
continue
}
nn, err = dst.WriteString(`\ufffd`)
n += nn
if err != nil {
return
}
i += size
start = i
continue
}
// U+2028 is LINE SEPARATOR.
// U+2029 is PARAGRAPH SEPARATOR.
// They are both technically valid characters in JSON strings,
// but don't work in JSONP, which has to be evaluated as JavaScript,
// and can lead to security holes there. It is valid JSON to
// escape them, so we do so unconditionally.
// See http://timelessrepo.com/json-isnt-a-javascript-subset for discussion.
if c == '\u2028' || c == '\u2029' {
if start < i {
nn, err = dst.Write(s[start:i])
@ -512,17 +535,20 @@ func rwquoted(dst jsWriter, s []byte) (n int, err error) {
if err != nil {
return
}
nn, err = dst.WriteString(`\u202`)
n += nn
if err != nil {
return
}
err = dst.WriteByte(hex[c&0xF])
if err != nil {
return
}
n++
}
nn, err = dst.WriteString(`\u202`)
n += nn
if err != nil {
return
}
err = dst.WriteByte(hex[c&0xF])
if err != nil {
return
}
n++
i += size
start = i
continue
}
i += size
}

View file

@ -126,6 +126,11 @@ func NewReaderSize(r io.Reader, sz int) *Reader {
return &Reader{R: fwd.NewReaderSize(r, sz)}
}
// NewReaderBuf returns a *Reader with a provided buffer.
func NewReaderBuf(r io.Reader, buf []byte) *Reader {
return &Reader{R: fwd.NewReaderBuf(r, buf)}
}
// Reader wraps an io.Reader and provides
// methods to read MessagePack-encoded values
// from it. Readers are buffered.

View file

@ -201,14 +201,14 @@ func ReadMapHeaderBytes(b []byte) (sz uint32, o []byte, err error) {
// - ErrShortBytes (too few bytes)
// - TypeError{} (not a str or bin)
func ReadMapKeyZC(b []byte) ([]byte, []byte, error) {
o, b, err := ReadStringZC(b)
o, x, err := ReadStringZC(b)
if err != nil {
if tperr, ok := err.(TypeError); ok && tperr.Encoded == BinType {
return ReadBytesZC(b)
}
return nil, b, err
}
return o, b, nil
return o, x, nil
}
// ReadArrayHeaderBytes attempts to read

View file

@ -3,7 +3,6 @@
package msgp
import (
"reflect"
"unsafe"
)
@ -24,18 +23,14 @@ const (
// THIS IS EVIL CODE.
// YOU HAVE BEEN WARNED.
func UnsafeString(b []byte) string {
sh := (*reflect.SliceHeader)(unsafe.Pointer(&b))
return *(*string)(unsafe.Pointer(&reflect.StringHeader{Data: sh.Data, Len: sh.Len}))
return *(*string)(unsafe.Pointer(&b))
}
// UnsafeBytes returns the string as a byte slice
// THIS SHOULD ONLY BE USED BY THE CODE GENERATOR.
// THIS IS EVIL CODE.
// YOU HAVE BEEN WARNED.
//
// Deprecated:
// Since this code is no longer used by the code generator,
// UnsafeBytes(s) is precisely equivalent to []byte(s)
func UnsafeBytes(s string) []byte {
return *(*[]byte)(unsafe.Pointer(&reflect.SliceHeader{
Len: len(s),
Cap: len(s),
Data: (*(*reflect.StringHeader)(unsafe.Pointer(&s))).Data,
}))
return []byte(s)
}

View file

@ -10,6 +10,11 @@ import (
"time"
)
const (
// min buffer size for the writer
minWriterSize = 18
)
// Sizer is an interface implemented
// by types that can estimate their
// size when MessagePack encoded.
@ -120,16 +125,27 @@ func NewWriter(w io.Writer) *Writer {
// NewWriterSize returns a writer with a custom buffer size.
func NewWriterSize(w io.Writer, sz int) *Writer {
// we must be able to require() 18
// we must be able to require() 'minWriterSize'
// contiguous bytes, so that is the
// practical minimum buffer size
if sz < 18 {
sz = 18
if sz < minWriterSize {
sz = minWriterSize
}
buf := make([]byte, sz)
return NewWriterBuf(w, buf)
}
// NewWriterBuf returns a writer with a provided buffer.
// 'buf' is not used when the capacity is smaller than 18,
// custom buffer is allocated instead.
func NewWriterBuf(w io.Writer, buf []byte) *Writer {
if cap(buf) < minWriterSize {
buf = make([]byte, minWriterSize)
}
buf = buf[:cap(buf)]
return &Writer{
w: w,
buf: make([]byte, sz),
buf: buf,
}
}