summaryrefslogtreecommitdiff
path: root/vendor/github.com/ugorji/go/codec/cbor.go
diff options
context:
space:
mode:
authorLibravatar dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>2024-03-11 10:12:06 +0000
committerLibravatar GitHub <noreply@github.com>2024-03-11 10:12:06 +0000
commite24efcac8b67baa9454bf27631e5e49f898a88d4 (patch)
treed9adec2f05e1d8714edee66062a4b95a81ee2a61 /vendor/github.com/ugorji/go/codec/cbor.go
parent[bugfix] Fix whitespace move_id issue (#2742) (diff)
downloadgotosocial-e24efcac8b67baa9454bf27631e5e49f898a88d4.tar.xz
[chore]: Bump github.com/gin-contrib/cors from 1.5.0 to 1.7.0 (#2745)
Diffstat (limited to 'vendor/github.com/ugorji/go/codec/cbor.go')
-rw-r--r--vendor/github.com/ugorji/go/codec/cbor.go23
1 files changed, 16 insertions, 7 deletions
diff --git a/vendor/github.com/ugorji/go/codec/cbor.go b/vendor/github.com/ugorji/go/codec/cbor.go
index 10944487e..802b1fc1d 100644
--- a/vendor/github.com/ugorji/go/codec/cbor.go
+++ b/vendor/github.com/ugorji/go/codec/cbor.go
@@ -123,6 +123,11 @@ type cborEncDriver struct {
encDriverNoopContainerWriter
h *CborHandle
+ // scratch buffer for: encode time, numbers, etc
+ //
+ // RFC3339Nano uses 35 chars: 2006-01-02T15:04:05.999999999Z07:00
+ b [40]byte
+
e Encoder
}
@@ -204,7 +209,7 @@ func (e *cborEncDriver) EncodeTime(t time.Time) {
e.EncodeNil()
} else if e.h.TimeRFC3339 {
e.encUint(0, cborBaseTag)
- e.encStringBytesS(cborBaseString, t.Format(time.RFC3339Nano))
+ e.encStringBytesS(cborBaseString, stringView(fmtTime(t, time.RFC3339Nano, e.b[:0])))
} else {
e.encUint(1, cborBaseTag)
t = t.UTC().Round(time.Microsecond)
@@ -427,12 +432,13 @@ func (d *cborDecDriver) decLen() int {
return int(d.decUint())
}
-func (d *cborDecDriver) decAppendIndefiniteBytes(bs []byte) []byte {
+func (d *cborDecDriver) decAppendIndefiniteBytes(bs []byte, major byte) []byte {
d.bdRead = false
for !d.CheckBreak() {
- if major := d.bd >> 5; major != cborMajorBytes && major != cborMajorString {
- d.d.errorf("invalid indefinite string/bytes %x (%s); got major %v, expected %v or %v",
- d.bd, cbordesc(d.bd), major, cborMajorBytes, cborMajorString)
+ chunkMajor := d.bd >> 5
+ if chunkMajor != major {
+ d.d.errorf("malformed indefinite string/bytes %x (%s); contains chunk with major type %v, expected %v",
+ d.bd, cbordesc(d.bd), chunkMajor, major)
}
n := uint(d.decLen())
oldLen := uint(len(bs))
@@ -445,6 +451,9 @@ func (d *cborDecDriver) decAppendIndefiniteBytes(bs []byte) []byte {
bs = bs[:newLen]
}
d.d.decRd.readb(bs[oldLen:newLen])
+ if d.h.ValidateUnicode && major == cborMajorString && !utf8.Valid(bs[oldLen:newLen]) {
+ d.d.errorf("indefinite-length text string contains chunk that is not a valid utf-8 sequence: 0x%x", bs[oldLen:newLen])
+ }
d.bdRead = false
}
d.bdRead = false
@@ -580,9 +589,9 @@ func (d *cborDecDriver) DecodeBytes(bs []byte) (bsOut []byte) {
d.bdRead = false
if bs == nil {
d.d.decByteState = decByteStateReuseBuf
- return d.decAppendIndefiniteBytes(d.d.b[:0])
+ return d.decAppendIndefiniteBytes(d.d.b[:0], d.bd>>5)
}
- return d.decAppendIndefiniteBytes(bs[:0])
+ return d.decAppendIndefiniteBytes(bs[:0], d.bd>>5)
}
if d.bd == cborBdIndefiniteArray {
d.bdRead = false