mirror of
https://github.com/containers/skopeo.git
synced 2025-09-24 19:37:39 +00:00
fix(deps): update module github.com/containers/storage to v1.52.0
... and c/image/v5 to main Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Signed-off-by: Miloslav Trmač <mitr@redhat.com>
This commit is contained in:
committed by
Miloslav Trmač
parent
6baa928c1b
commit
58ff9fdb27
51
vendor/go.mongodb.org/mongo-driver/bson/bsonrw/copier.go
generated
vendored
51
vendor/go.mongodb.org/mongo-driver/bson/bsonrw/copier.go
generated
vendored
@@ -17,20 +17,32 @@ import (
|
||||
|
||||
// Copier is a type that allows copying between ValueReaders, ValueWriters, and
|
||||
// []byte values.
|
||||
//
|
||||
// Deprecated: Copying BSON documents using the ValueWriter and ValueReader interfaces will not be
|
||||
// supported in Go Driver 2.0.
|
||||
type Copier struct{}
|
||||
|
||||
// NewCopier creates a new copier with the given registry. If a nil registry is provided
|
||||
// a default registry is used.
|
||||
//
|
||||
// Deprecated: Copying BSON documents using the ValueWriter and ValueReader interfaces will not be
|
||||
// supported in Go Driver 2.0.
|
||||
func NewCopier() Copier {
|
||||
return Copier{}
|
||||
}
|
||||
|
||||
// CopyDocument handles copying a document from src to dst.
|
||||
//
|
||||
// Deprecated: Copying BSON documents using the ValueWriter and ValueReader interfaces will not be
|
||||
// supported in Go Driver 2.0.
|
||||
func CopyDocument(dst ValueWriter, src ValueReader) error {
|
||||
return Copier{}.CopyDocument(dst, src)
|
||||
}
|
||||
|
||||
// CopyDocument handles copying one document from the src to the dst.
|
||||
//
|
||||
// Deprecated: Copying BSON documents using the ValueWriter and ValueReader interfaces will not be
|
||||
// supported in Go Driver 2.0.
|
||||
func (c Copier) CopyDocument(dst ValueWriter, src ValueReader) error {
|
||||
dr, err := src.ReadDocument()
|
||||
if err != nil {
|
||||
@@ -47,6 +59,9 @@ func (c Copier) CopyDocument(dst ValueWriter, src ValueReader) error {
|
||||
|
||||
// CopyArrayFromBytes copies the values from a BSON array represented as a
|
||||
// []byte to a ValueWriter.
|
||||
//
|
||||
// Deprecated: Copying BSON arrays using the ValueWriter and ValueReader interfaces will not be
|
||||
// supported in Go Driver 2.0.
|
||||
func (c Copier) CopyArrayFromBytes(dst ValueWriter, src []byte) error {
|
||||
aw, err := dst.WriteArray()
|
||||
if err != nil {
|
||||
@@ -63,6 +78,9 @@ func (c Copier) CopyArrayFromBytes(dst ValueWriter, src []byte) error {
|
||||
|
||||
// CopyDocumentFromBytes copies the values from a BSON document represented as a
|
||||
// []byte to a ValueWriter.
|
||||
//
|
||||
// Deprecated: Copying BSON documents using the ValueWriter and ValueReader interfaces will not be
|
||||
// supported in Go Driver 2.0.
|
||||
func (c Copier) CopyDocumentFromBytes(dst ValueWriter, src []byte) error {
|
||||
dw, err := dst.WriteDocument()
|
||||
if err != nil {
|
||||
@@ -81,6 +99,9 @@ type writeElementFn func(key string) (ValueWriter, error)
|
||||
|
||||
// CopyBytesToArrayWriter copies the values from a BSON Array represented as a []byte to an
|
||||
// ArrayWriter.
|
||||
//
|
||||
// Deprecated: Copying BSON arrays using the ArrayWriter interface will not be supported in Go
|
||||
// Driver 2.0.
|
||||
func (c Copier) CopyBytesToArrayWriter(dst ArrayWriter, src []byte) error {
|
||||
wef := func(_ string) (ValueWriter, error) {
|
||||
return dst.WriteArrayElement()
|
||||
@@ -91,6 +112,9 @@ func (c Copier) CopyBytesToArrayWriter(dst ArrayWriter, src []byte) error {
|
||||
|
||||
// CopyBytesToDocumentWriter copies the values from a BSON document represented as a []byte to a
|
||||
// DocumentWriter.
|
||||
//
|
||||
// Deprecated: Copying BSON documents using the ValueWriter and ValueReader interfaces will not be
|
||||
// supported in Go Driver 2.0.
|
||||
func (c Copier) CopyBytesToDocumentWriter(dst DocumentWriter, src []byte) error {
|
||||
wef := func(key string) (ValueWriter, error) {
|
||||
return dst.WriteDocumentElement(key)
|
||||
@@ -100,7 +124,7 @@ func (c Copier) CopyBytesToDocumentWriter(dst DocumentWriter, src []byte) error
|
||||
}
|
||||
|
||||
func (c Copier) copyBytesToValueWriter(src []byte, wef writeElementFn) error {
|
||||
// TODO(skriptble): Create errors types here. Anything thats a tag should be a property.
|
||||
// TODO(skriptble): Create errors types here. Anything that is a tag should be a property.
|
||||
length, rem, ok := bsoncore.ReadLength(src)
|
||||
if !ok {
|
||||
return fmt.Errorf("couldn't read length from src, not enough bytes. length=%d", len(src))
|
||||
@@ -150,12 +174,18 @@ func (c Copier) copyBytesToValueWriter(src []byte, wef writeElementFn) error {
|
||||
|
||||
// CopyDocumentToBytes copies an entire document from the ValueReader and
|
||||
// returns it as bytes.
|
||||
//
|
||||
// Deprecated: Copying BSON documents using the ValueWriter and ValueReader interfaces will not be
|
||||
// supported in Go Driver 2.0.
|
||||
func (c Copier) CopyDocumentToBytes(src ValueReader) ([]byte, error) {
|
||||
return c.AppendDocumentBytes(nil, src)
|
||||
}
|
||||
|
||||
// AppendDocumentBytes functions the same as CopyDocumentToBytes, but will
|
||||
// append the result to dst.
|
||||
//
|
||||
// Deprecated: Copying BSON documents using the ValueWriter and ValueReader interfaces will not be
|
||||
// supported in Go Driver 2.0.
|
||||
func (c Copier) AppendDocumentBytes(dst []byte, src ValueReader) ([]byte, error) {
|
||||
if br, ok := src.(BytesReader); ok {
|
||||
_, dst, err := br.ReadValueBytes(dst)
|
||||
@@ -163,7 +193,7 @@ func (c Copier) AppendDocumentBytes(dst []byte, src ValueReader) ([]byte, error)
|
||||
}
|
||||
|
||||
vw := vwPool.Get().(*valueWriter)
|
||||
defer vwPool.Put(vw)
|
||||
defer putValueWriter(vw)
|
||||
|
||||
vw.reset(dst)
|
||||
|
||||
@@ -173,6 +203,9 @@ func (c Copier) AppendDocumentBytes(dst []byte, src ValueReader) ([]byte, error)
|
||||
}
|
||||
|
||||
// AppendArrayBytes copies an array from the ValueReader to dst.
|
||||
//
|
||||
// Deprecated: Copying BSON arrays using the ValueWriter and ValueReader interfaces will not be
|
||||
// supported in Go Driver 2.0.
|
||||
func (c Copier) AppendArrayBytes(dst []byte, src ValueReader) ([]byte, error) {
|
||||
if br, ok := src.(BytesReader); ok {
|
||||
_, dst, err := br.ReadValueBytes(dst)
|
||||
@@ -180,7 +213,7 @@ func (c Copier) AppendArrayBytes(dst []byte, src ValueReader) ([]byte, error) {
|
||||
}
|
||||
|
||||
vw := vwPool.Get().(*valueWriter)
|
||||
defer vwPool.Put(vw)
|
||||
defer putValueWriter(vw)
|
||||
|
||||
vw.reset(dst)
|
||||
|
||||
@@ -190,6 +223,8 @@ func (c Copier) AppendArrayBytes(dst []byte, src ValueReader) ([]byte, error) {
|
||||
}
|
||||
|
||||
// CopyValueFromBytes will write the value represtend by t and src to dst.
|
||||
//
|
||||
// Deprecated: Use [go.mongodb.org/mongo-driver/bson.UnmarshalValue] instead.
|
||||
func (c Copier) CopyValueFromBytes(dst ValueWriter, t bsontype.Type, src []byte) error {
|
||||
if wvb, ok := dst.(BytesWriter); ok {
|
||||
return wvb.WriteValueBytes(t, src)
|
||||
@@ -206,19 +241,24 @@ func (c Copier) CopyValueFromBytes(dst ValueWriter, t bsontype.Type, src []byte)
|
||||
|
||||
// CopyValueToBytes copies a value from src and returns it as a bsontype.Type and a
|
||||
// []byte.
|
||||
//
|
||||
// Deprecated: Use [go.mongodb.org/mongo-driver/bson.MarshalValue] instead.
|
||||
func (c Copier) CopyValueToBytes(src ValueReader) (bsontype.Type, []byte, error) {
|
||||
return c.AppendValueBytes(nil, src)
|
||||
}
|
||||
|
||||
// AppendValueBytes functions the same as CopyValueToBytes, but will append the
|
||||
// result to dst.
|
||||
//
|
||||
// Deprecated: Appending individual BSON elements to an existing slice will not be supported in Go
|
||||
// Driver 2.0.
|
||||
func (c Copier) AppendValueBytes(dst []byte, src ValueReader) (bsontype.Type, []byte, error) {
|
||||
if br, ok := src.(BytesReader); ok {
|
||||
return br.ReadValueBytes(dst)
|
||||
}
|
||||
|
||||
vw := vwPool.Get().(*valueWriter)
|
||||
defer vwPool.Put(vw)
|
||||
defer putValueWriter(vw)
|
||||
|
||||
start := len(dst)
|
||||
|
||||
@@ -234,6 +274,9 @@ func (c Copier) AppendValueBytes(dst []byte, src ValueReader) (bsontype.Type, []
|
||||
}
|
||||
|
||||
// CopyValue will copy a single value from src to dst.
|
||||
//
|
||||
// Deprecated: Copying BSON values using the ValueWriter and ValueReader interfaces will not be
|
||||
// supported in Go Driver 2.0.
|
||||
func (c Copier) CopyValue(dst ValueWriter, src ValueReader) error {
|
||||
var err error
|
||||
switch src.Type() {
|
||||
|
8
vendor/go.mongodb.org/mongo-driver/bson/bsonrw/extjson_reader.go
generated
vendored
8
vendor/go.mongodb.org/mongo-driver/bson/bsonrw/extjson_reader.go
generated
vendored
@@ -16,11 +16,15 @@ import (
|
||||
)
|
||||
|
||||
// ExtJSONValueReaderPool is a pool for ValueReaders that read ExtJSON.
|
||||
//
|
||||
// Deprecated: ExtJSONValueReaderPool will not be supported in Go Driver 2.0.
|
||||
type ExtJSONValueReaderPool struct {
|
||||
pool sync.Pool
|
||||
}
|
||||
|
||||
// NewExtJSONValueReaderPool instantiates a new ExtJSONValueReaderPool.
|
||||
//
|
||||
// Deprecated: ExtJSONValueReaderPool will not be supported in Go Driver 2.0.
|
||||
func NewExtJSONValueReaderPool() *ExtJSONValueReaderPool {
|
||||
return &ExtJSONValueReaderPool{
|
||||
pool: sync.Pool{
|
||||
@@ -32,6 +36,8 @@ func NewExtJSONValueReaderPool() *ExtJSONValueReaderPool {
|
||||
}
|
||||
|
||||
// Get retrieves a ValueReader from the pool and uses src as the underlying ExtJSON.
|
||||
//
|
||||
// Deprecated: ExtJSONValueReaderPool will not be supported in Go Driver 2.0.
|
||||
func (bvrp *ExtJSONValueReaderPool) Get(r io.Reader, canonical bool) (ValueReader, error) {
|
||||
vr := bvrp.pool.Get().(*extJSONValueReader)
|
||||
return vr.reset(r, canonical)
|
||||
@@ -39,6 +45,8 @@ func (bvrp *ExtJSONValueReaderPool) Get(r io.Reader, canonical bool) (ValueReade
|
||||
|
||||
// Put inserts a ValueReader into the pool. If the ValueReader is not a ExtJSON ValueReader nothing
|
||||
// is inserted into the pool and ok will be false.
|
||||
//
|
||||
// Deprecated: ExtJSONValueReaderPool will not be supported in Go Driver 2.0.
|
||||
func (bvrp *ExtJSONValueReaderPool) Put(vr ValueReader) (ok bool) {
|
||||
bvr, ok := vr.(*extJSONValueReader)
|
||||
if !ok {
|
||||
|
23
vendor/go.mongodb.org/mongo-driver/bson/bsonrw/extjson_writer.go
generated
vendored
23
vendor/go.mongodb.org/mongo-driver/bson/bsonrw/extjson_writer.go
generated
vendored
@@ -23,11 +23,15 @@ import (
|
||||
)
|
||||
|
||||
// ExtJSONValueWriterPool is a pool for ExtJSON ValueWriters.
|
||||
//
|
||||
// Deprecated: ExtJSONValueWriterPool will not be supported in Go Driver 2.0.
|
||||
type ExtJSONValueWriterPool struct {
|
||||
pool sync.Pool
|
||||
}
|
||||
|
||||
// NewExtJSONValueWriterPool creates a new pool for ValueWriter instances that write to ExtJSON.
|
||||
//
|
||||
// Deprecated: ExtJSONValueWriterPool will not be supported in Go Driver 2.0.
|
||||
func NewExtJSONValueWriterPool() *ExtJSONValueWriterPool {
|
||||
return &ExtJSONValueWriterPool{
|
||||
pool: sync.Pool{
|
||||
@@ -39,6 +43,8 @@ func NewExtJSONValueWriterPool() *ExtJSONValueWriterPool {
|
||||
}
|
||||
|
||||
// Get retrieves a ExtJSON ValueWriter from the pool and resets it to use w as the destination.
|
||||
//
|
||||
// Deprecated: ExtJSONValueWriterPool will not be supported in Go Driver 2.0.
|
||||
func (bvwp *ExtJSONValueWriterPool) Get(w io.Writer, canonical, escapeHTML bool) ValueWriter {
|
||||
vw := bvwp.pool.Get().(*extJSONValueWriter)
|
||||
if writer, ok := w.(*SliceWriter); ok {
|
||||
@@ -53,6 +59,8 @@ func (bvwp *ExtJSONValueWriterPool) Get(w io.Writer, canonical, escapeHTML bool)
|
||||
|
||||
// Put inserts a ValueWriter into the pool. If the ValueWriter is not a ExtJSON ValueWriter, nothing
|
||||
// happens and ok will be false.
|
||||
//
|
||||
// Deprecated: ExtJSONValueWriterPool will not be supported in Go Driver 2.0.
|
||||
func (bvwp *ExtJSONValueWriterPool) Put(vw ValueWriter) (ok bool) {
|
||||
bvw, ok := vw.(*extJSONValueWriter)
|
||||
if !ok {
|
||||
@@ -80,6 +88,7 @@ type extJSONValueWriter struct {
|
||||
frame int64
|
||||
canonical bool
|
||||
escapeHTML bool
|
||||
newlines bool
|
||||
}
|
||||
|
||||
// NewExtJSONValueWriter creates a ValueWriter that writes Extended JSON to w.
|
||||
@@ -88,10 +97,13 @@ func NewExtJSONValueWriter(w io.Writer, canonical, escapeHTML bool) (ValueWriter
|
||||
return nil, errNilWriter
|
||||
}
|
||||
|
||||
return newExtJSONWriter(w, canonical, escapeHTML), nil
|
||||
// Enable newlines for all Extended JSON value writers created by NewExtJSONValueWriter. We
|
||||
// expect these value writers to be used with an Encoder, which should add newlines after
|
||||
// encoded Extended JSON documents.
|
||||
return newExtJSONWriter(w, canonical, escapeHTML, true), nil
|
||||
}
|
||||
|
||||
func newExtJSONWriter(w io.Writer, canonical, escapeHTML bool) *extJSONValueWriter {
|
||||
func newExtJSONWriter(w io.Writer, canonical, escapeHTML, newlines bool) *extJSONValueWriter {
|
||||
stack := make([]ejvwState, 1, 5)
|
||||
stack[0] = ejvwState{mode: mTopLevel}
|
||||
|
||||
@@ -101,6 +113,7 @@ func newExtJSONWriter(w io.Writer, canonical, escapeHTML bool) *extJSONValueWrit
|
||||
stack: stack,
|
||||
canonical: canonical,
|
||||
escapeHTML: escapeHTML,
|
||||
newlines: newlines,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -564,6 +577,12 @@ func (ejvw *extJSONValueWriter) WriteDocumentEnd() error {
|
||||
case mDocument:
|
||||
ejvw.buf = append(ejvw.buf, ',')
|
||||
case mTopLevel:
|
||||
// If the value writer has newlines enabled, end top-level documents with a newline so that
|
||||
// multiple documents encoded to the same writer are separated by newlines. That matches the
|
||||
// Go json.Encoder behavior and also works with bsonrw.NewExtJSONValueReader.
|
||||
if ejvw.newlines {
|
||||
ejvw.buf = append(ejvw.buf, '\n')
|
||||
}
|
||||
if ejvw.w != nil {
|
||||
if _, err := ejvw.w.Write(ejvw.buf); err != nil {
|
||||
return err
|
||||
|
2
vendor/go.mongodb.org/mongo-driver/bson/bsonrw/reader.go
generated
vendored
2
vendor/go.mongodb.org/mongo-driver/bson/bsonrw/reader.go
generated
vendored
@@ -58,6 +58,8 @@ type ValueReader interface {
|
||||
// types that implement ValueReader may also implement this interface.
|
||||
//
|
||||
// The bytes of the value will be appended to dst.
|
||||
//
|
||||
// Deprecated: BytesReader will not be supported in Go Driver 2.0.
|
||||
type BytesReader interface {
|
||||
ReadValueBytes(dst []byte) (bsontype.Type, []byte, error)
|
||||
}
|
||||
|
20
vendor/go.mongodb.org/mongo-driver/bson/bsonrw/value_reader.go
generated
vendored
20
vendor/go.mongodb.org/mongo-driver/bson/bsonrw/value_reader.go
generated
vendored
@@ -28,11 +28,15 @@ var vrPool = sync.Pool{
|
||||
}
|
||||
|
||||
// BSONValueReaderPool is a pool for ValueReaders that read BSON.
|
||||
//
|
||||
// Deprecated: BSONValueReaderPool will not be supported in Go Driver 2.0.
|
||||
type BSONValueReaderPool struct {
|
||||
pool sync.Pool
|
||||
}
|
||||
|
||||
// NewBSONValueReaderPool instantiates a new BSONValueReaderPool.
|
||||
//
|
||||
// Deprecated: BSONValueReaderPool will not be supported in Go Driver 2.0.
|
||||
func NewBSONValueReaderPool() *BSONValueReaderPool {
|
||||
return &BSONValueReaderPool{
|
||||
pool: sync.Pool{
|
||||
@@ -44,6 +48,8 @@ func NewBSONValueReaderPool() *BSONValueReaderPool {
|
||||
}
|
||||
|
||||
// Get retrieves a ValueReader from the pool and uses src as the underlying BSON.
|
||||
//
|
||||
// Deprecated: BSONValueReaderPool will not be supported in Go Driver 2.0.
|
||||
func (bvrp *BSONValueReaderPool) Get(src []byte) ValueReader {
|
||||
vr := bvrp.pool.Get().(*valueReader)
|
||||
vr.reset(src)
|
||||
@@ -52,6 +58,8 @@ func (bvrp *BSONValueReaderPool) Get(src []byte) ValueReader {
|
||||
|
||||
// Put inserts a ValueReader into the pool. If the ValueReader is not a BSON ValueReader nothing
|
||||
// is inserted into the pool and ok will be false.
|
||||
//
|
||||
// Deprecated: BSONValueReaderPool will not be supported in Go Driver 2.0.
|
||||
func (bvrp *BSONValueReaderPool) Put(vr ValueReader) (ok bool) {
|
||||
bvr, ok := vr.(*valueReader)
|
||||
if !ok {
|
||||
@@ -731,8 +739,7 @@ func (vr *valueReader) ReadValue() (ValueReader, error) {
|
||||
return nil, ErrEOA
|
||||
}
|
||||
|
||||
_, err = vr.readCString()
|
||||
if err != nil {
|
||||
if err := vr.skipCString(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
@@ -786,6 +793,15 @@ func (vr *valueReader) readByte() (byte, error) {
|
||||
return vr.d[vr.offset-1], nil
|
||||
}
|
||||
|
||||
func (vr *valueReader) skipCString() error {
|
||||
idx := bytes.IndexByte(vr.d[vr.offset:], 0x00)
|
||||
if idx < 0 {
|
||||
return io.EOF
|
||||
}
|
||||
vr.offset += int64(idx) + 1
|
||||
return nil
|
||||
}
|
||||
|
||||
func (vr *valueReader) readCString() (string, error) {
|
||||
idx := bytes.IndexByte(vr.d[vr.offset:], 0x00)
|
||||
if idx < 0 {
|
||||
|
84
vendor/go.mongodb.org/mongo-driver/bson/bsonrw/value_writer.go
generated
vendored
84
vendor/go.mongodb.org/mongo-driver/bson/bsonrw/value_writer.go
generated
vendored
@@ -28,12 +28,23 @@ var vwPool = sync.Pool{
|
||||
},
|
||||
}
|
||||
|
||||
func putValueWriter(vw *valueWriter) {
|
||||
if vw != nil {
|
||||
vw.w = nil // don't leak the writer
|
||||
vwPool.Put(vw)
|
||||
}
|
||||
}
|
||||
|
||||
// BSONValueWriterPool is a pool for BSON ValueWriters.
|
||||
//
|
||||
// Deprecated: BSONValueWriterPool will not be supported in Go Driver 2.0.
|
||||
type BSONValueWriterPool struct {
|
||||
pool sync.Pool
|
||||
}
|
||||
|
||||
// NewBSONValueWriterPool creates a new pool for ValueWriter instances that write to BSON.
|
||||
//
|
||||
// Deprecated: BSONValueWriterPool will not be supported in Go Driver 2.0.
|
||||
func NewBSONValueWriterPool() *BSONValueWriterPool {
|
||||
return &BSONValueWriterPool{
|
||||
pool: sync.Pool{
|
||||
@@ -45,6 +56,8 @@ func NewBSONValueWriterPool() *BSONValueWriterPool {
|
||||
}
|
||||
|
||||
// Get retrieves a BSON ValueWriter from the pool and resets it to use w as the destination.
|
||||
//
|
||||
// Deprecated: BSONValueWriterPool will not be supported in Go Driver 2.0.
|
||||
func (bvwp *BSONValueWriterPool) Get(w io.Writer) ValueWriter {
|
||||
vw := bvwp.pool.Get().(*valueWriter)
|
||||
|
||||
@@ -56,6 +69,8 @@ func (bvwp *BSONValueWriterPool) Get(w io.Writer) ValueWriter {
|
||||
}
|
||||
|
||||
// GetAtModeElement retrieves a ValueWriterFlusher from the pool and resets it to use w as the destination.
|
||||
//
|
||||
// Deprecated: BSONValueWriterPool will not be supported in Go Driver 2.0.
|
||||
func (bvwp *BSONValueWriterPool) GetAtModeElement(w io.Writer) ValueWriterFlusher {
|
||||
vw := bvwp.Get(w).(*valueWriter)
|
||||
vw.push(mElement)
|
||||
@@ -64,6 +79,8 @@ func (bvwp *BSONValueWriterPool) GetAtModeElement(w io.Writer) ValueWriterFlushe
|
||||
|
||||
// Put inserts a ValueWriter into the pool. If the ValueWriter is not a BSON ValueWriter, nothing
|
||||
// happens and ok will be false.
|
||||
//
|
||||
// Deprecated: BSONValueWriterPool will not be supported in Go Driver 2.0.
|
||||
func (bvwp *BSONValueWriterPool) Put(vw ValueWriter) (ok bool) {
|
||||
bvw, ok := vw.(*valueWriter)
|
||||
if !ok {
|
||||
@@ -139,32 +156,21 @@ type valueWriter struct {
|
||||
}
|
||||
|
||||
func (vw *valueWriter) advanceFrame() {
|
||||
if vw.frame+1 >= int64(len(vw.stack)) { // We need to grow the stack
|
||||
length := len(vw.stack)
|
||||
if length+1 >= cap(vw.stack) {
|
||||
// double it
|
||||
buf := make([]vwState, 2*cap(vw.stack)+1)
|
||||
copy(buf, vw.stack)
|
||||
vw.stack = buf
|
||||
}
|
||||
vw.stack = vw.stack[:length+1]
|
||||
}
|
||||
vw.frame++
|
||||
if vw.frame >= int64(len(vw.stack)) {
|
||||
vw.stack = append(vw.stack, vwState{})
|
||||
}
|
||||
}
|
||||
|
||||
func (vw *valueWriter) push(m mode) {
|
||||
vw.advanceFrame()
|
||||
|
||||
// Clean the stack
|
||||
vw.stack[vw.frame].mode = m
|
||||
vw.stack[vw.frame].key = ""
|
||||
vw.stack[vw.frame].arrkey = 0
|
||||
vw.stack[vw.frame].start = 0
|
||||
vw.stack[vw.frame] = vwState{mode: m}
|
||||
|
||||
vw.stack[vw.frame].mode = m
|
||||
switch m {
|
||||
case mDocument, mArray, mCodeWithScope:
|
||||
vw.reserveLength()
|
||||
vw.reserveLength() // WARN: this is not needed
|
||||
}
|
||||
}
|
||||
|
||||
@@ -203,6 +209,7 @@ func newValueWriter(w io.Writer) *valueWriter {
|
||||
return vw
|
||||
}
|
||||
|
||||
// TODO: only used in tests
|
||||
func newValueWriterFromSlice(buf []byte) *valueWriter {
|
||||
vw := new(valueWriter)
|
||||
stack := make([]vwState, 1, 5)
|
||||
@@ -239,17 +246,16 @@ func (vw *valueWriter) invalidTransitionError(destination mode, name string, mod
|
||||
}
|
||||
|
||||
func (vw *valueWriter) writeElementHeader(t bsontype.Type, destination mode, callerName string, addmodes ...mode) error {
|
||||
switch vw.stack[vw.frame].mode {
|
||||
frame := &vw.stack[vw.frame]
|
||||
switch frame.mode {
|
||||
case mElement:
|
||||
key := vw.stack[vw.frame].key
|
||||
key := frame.key
|
||||
if !isValidCString(key) {
|
||||
return errors.New("BSON element key cannot contain null bytes")
|
||||
}
|
||||
|
||||
vw.buf = bsoncore.AppendHeader(vw.buf, t, key)
|
||||
vw.appendHeader(t, key)
|
||||
case mValue:
|
||||
// TODO: Do this with a cache of the first 1000 or so array keys.
|
||||
vw.buf = bsoncore.AppendHeader(vw.buf, t, strconv.Itoa(vw.stack[vw.frame].arrkey))
|
||||
vw.appendIntHeader(t, frame.arrkey)
|
||||
default:
|
||||
modes := []mode{mElement, mValue}
|
||||
if addmodes != nil {
|
||||
@@ -591,9 +597,11 @@ func (vw *valueWriter) writeLength() error {
|
||||
if length > maxSize {
|
||||
return errMaxDocumentSizeExceeded{size: int64(len(vw.buf))}
|
||||
}
|
||||
length = length - int(vw.stack[vw.frame].start)
|
||||
start := vw.stack[vw.frame].start
|
||||
frame := &vw.stack[vw.frame]
|
||||
length = length - int(frame.start)
|
||||
start := frame.start
|
||||
|
||||
_ = vw.buf[start+3] // BCE
|
||||
vw.buf[start+0] = byte(length)
|
||||
vw.buf[start+1] = byte(length >> 8)
|
||||
vw.buf[start+2] = byte(length >> 16)
|
||||
@@ -602,5 +610,31 @@ func (vw *valueWriter) writeLength() error {
|
||||
}
|
||||
|
||||
func isValidCString(cs string) bool {
|
||||
return !strings.ContainsRune(cs, '\x00')
|
||||
// Disallow the zero byte in a cstring because the zero byte is used as the
|
||||
// terminating character.
|
||||
//
|
||||
// It's safe to check bytes instead of runes because all multibyte UTF-8
|
||||
// code points start with (binary) 11xxxxxx or 10xxxxxx, so 00000000 (i.e.
|
||||
// 0) will never be part of a multibyte UTF-8 code point. This logic is the
|
||||
// same as the "r < utf8.RuneSelf" case in strings.IndexRune but can be
|
||||
// inlined.
|
||||
//
|
||||
// https://cs.opensource.google/go/go/+/refs/tags/go1.21.1:src/strings/strings.go;l=127
|
||||
return strings.IndexByte(cs, 0) == -1
|
||||
}
|
||||
|
||||
// appendHeader is the same as bsoncore.AppendHeader but does not check if the
|
||||
// key is a valid C string since the caller has already checked for that.
|
||||
//
|
||||
// The caller of this function must check if key is a valid C string.
|
||||
func (vw *valueWriter) appendHeader(t bsontype.Type, key string) {
|
||||
vw.buf = bsoncore.AppendType(vw.buf, t)
|
||||
vw.buf = append(vw.buf, key...)
|
||||
vw.buf = append(vw.buf, 0x00)
|
||||
}
|
||||
|
||||
func (vw *valueWriter) appendIntHeader(t bsontype.Type, key int) {
|
||||
vw.buf = bsoncore.AppendType(vw.buf, t)
|
||||
vw.buf = strconv.AppendInt(vw.buf, int64(key), 10)
|
||||
vw.buf = append(vw.buf, 0x00)
|
||||
}
|
||||
|
9
vendor/go.mongodb.org/mongo-driver/bson/bsonrw/writer.go
generated
vendored
9
vendor/go.mongodb.org/mongo-driver/bson/bsonrw/writer.go
generated
vendored
@@ -56,6 +56,8 @@ type ValueWriter interface {
|
||||
}
|
||||
|
||||
// ValueWriterFlusher is a superset of ValueWriter that exposes functionality to flush to the underlying buffer.
|
||||
//
|
||||
// Deprecated: ValueWriterFlusher will not be supported in Go Driver 2.0.
|
||||
type ValueWriterFlusher interface {
|
||||
ValueWriter
|
||||
Flush() error
|
||||
@@ -64,13 +66,20 @@ type ValueWriterFlusher interface {
|
||||
// BytesWriter is the interface used to write BSON bytes to a ValueWriter.
|
||||
// This interface is meant to be a superset of ValueWriter, so that types that
|
||||
// implement ValueWriter may also implement this interface.
|
||||
//
|
||||
// Deprecated: BytesWriter will not be supported in Go Driver 2.0.
|
||||
type BytesWriter interface {
|
||||
WriteValueBytes(t bsontype.Type, b []byte) error
|
||||
}
|
||||
|
||||
// SliceWriter allows a pointer to a slice of bytes to be used as an io.Writer.
|
||||
//
|
||||
// Deprecated: SliceWriter will not be supported in Go Driver 2.0.
|
||||
type SliceWriter []byte
|
||||
|
||||
// Write writes the bytes to the underlying slice.
|
||||
//
|
||||
// Deprecated: SliceWriter will not be supported in Go Driver 2.0.
|
||||
func (sw *SliceWriter) Write(p []byte) (int, error) {
|
||||
written := len(p)
|
||||
*sw = append(*sw, p...)
|
||||
|
Reference in New Issue
Block a user