diff --git a/go/go.mod b/go/go.mod index 6fb6bec..fadb0ef 100644 --- a/go/go.mod +++ b/go/go.mod @@ -4,5 +4,5 @@ go 1.18 require ( github.com/golang/protobuf v1.5.2 - google.golang.org/protobuf v1.27.1 + google.golang.org/protobuf v1.28.0 ) diff --git a/go/go.sum b/go/go.sum index 85ba719..e95b5e9 100644 --- a/go/go.sum +++ b/go/go.sum @@ -7,5 +7,5 @@ golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IV golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.27.1 h1:SnqbnDw1V7RiZcXPx5MEeqPv2s79L9i7BJUlG/+RurQ= -google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.28.0 h1:w43yiav+6bVFTBQFZX0r7ipe9JQ1QsbMgHwbBziscLw= +google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= diff --git a/go/vendor/google.golang.org/protobuf/encoding/protowire/wire.go b/go/vendor/google.golang.org/protobuf/encoding/protowire/wire.go index a427f8b..9c61112 100644 --- a/go/vendor/google.golang.org/protobuf/encoding/protowire/wire.go +++ b/go/vendor/google.golang.org/protobuf/encoding/protowire/wire.go @@ -21,10 +21,11 @@ import ( type Number int32 const ( - MinValidNumber Number = 1 - FirstReservedNumber Number = 19000 - LastReservedNumber Number = 19999 - MaxValidNumber Number = 1<<29 - 1 + MinValidNumber Number = 1 + FirstReservedNumber Number = 19000 + LastReservedNumber Number = 19999 + MaxValidNumber Number = 1<<29 - 1 + DefaultRecursionLimit = 10000 ) // IsValid reports whether the field number is semantically valid. @@ -55,6 +56,7 @@ const ( errCodeOverflow errCodeReserved errCodeEndGroup + errCodeRecursionDepth ) var ( @@ -112,6 +114,10 @@ func ConsumeField(b []byte) (Number, Type, int) { // When parsing a group, the length includes the end group marker and // the end group is verified to match the starting field number. func ConsumeFieldValue(num Number, typ Type, b []byte) (n int) { + return consumeFieldValueD(num, typ, b, DefaultRecursionLimit) +} + +func consumeFieldValueD(num Number, typ Type, b []byte, depth int) (n int) { switch typ { case VarintType: _, n = ConsumeVarint(b) @@ -126,6 +132,9 @@ func ConsumeFieldValue(num Number, typ Type, b []byte) (n int) { _, n = ConsumeBytes(b) return n case StartGroupType: + if depth < 0 { + return errCodeRecursionDepth + } n0 := len(b) for { num2, typ2, n := ConsumeTag(b) @@ -140,7 +149,7 @@ func ConsumeFieldValue(num Number, typ Type, b []byte) (n int) { return n0 - len(b) } - n = ConsumeFieldValue(num2, typ2, b) + n = consumeFieldValueD(num2, typ2, b, depth-1) if n < 0 { return n // forward error code } diff --git a/go/vendor/google.golang.org/protobuf/internal/encoding/text/decode.go b/go/vendor/google.golang.org/protobuf/internal/encoding/text/decode.go index eb10ea1..3780377 100644 --- a/go/vendor/google.golang.org/protobuf/internal/encoding/text/decode.go +++ b/go/vendor/google.golang.org/protobuf/internal/encoding/text/decode.go @@ -381,7 +381,7 @@ func (d *Decoder) currentOpenKind() (Kind, byte) { case '[': return ListOpen, ']' } - panic(fmt.Sprintf("Decoder: openStack contains invalid byte %s", string(openCh))) + panic(fmt.Sprintf("Decoder: openStack contains invalid byte %c", openCh)) } func (d *Decoder) pushOpenStack(ch byte) { diff --git a/go/vendor/google.golang.org/protobuf/internal/errors/is_go112.go b/go/vendor/google.golang.org/protobuf/internal/errors/is_go112.go index f90e909..fbcd349 100644 --- a/go/vendor/google.golang.org/protobuf/internal/errors/is_go112.go +++ b/go/vendor/google.golang.org/protobuf/internal/errors/is_go112.go @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build !go1.13 // +build !go1.13 package errors diff --git a/go/vendor/google.golang.org/protobuf/internal/errors/is_go113.go b/go/vendor/google.golang.org/protobuf/internal/errors/is_go113.go index dc05f41..5e72f1c 100644 --- a/go/vendor/google.golang.org/protobuf/internal/errors/is_go113.go +++ b/go/vendor/google.golang.org/protobuf/internal/errors/is_go113.go @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build go1.13 // +build go1.13 package errors diff --git a/go/vendor/google.golang.org/protobuf/internal/flags/proto_legacy_disable.go b/go/vendor/google.golang.org/protobuf/internal/flags/proto_legacy_disable.go index a72995f..bda8e8c 100644 --- a/go/vendor/google.golang.org/protobuf/internal/flags/proto_legacy_disable.go +++ b/go/vendor/google.golang.org/protobuf/internal/flags/proto_legacy_disable.go @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build !protolegacy // +build !protolegacy package flags diff --git a/go/vendor/google.golang.org/protobuf/internal/flags/proto_legacy_enable.go b/go/vendor/google.golang.org/protobuf/internal/flags/proto_legacy_enable.go index 772e2f0..6d8d9bd 100644 --- a/go/vendor/google.golang.org/protobuf/internal/flags/proto_legacy_enable.go +++ b/go/vendor/google.golang.org/protobuf/internal/flags/proto_legacy_enable.go @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build protolegacy // +build protolegacy package flags diff --git a/go/vendor/google.golang.org/protobuf/internal/impl/codec_map_go111.go b/go/vendor/google.golang.org/protobuf/internal/impl/codec_map_go111.go index 2706bb6..4b15493 100644 --- a/go/vendor/google.golang.org/protobuf/internal/impl/codec_map_go111.go +++ b/go/vendor/google.golang.org/protobuf/internal/impl/codec_map_go111.go @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build !go1.12 // +build !go1.12 package impl diff --git a/go/vendor/google.golang.org/protobuf/internal/impl/codec_map_go112.go b/go/vendor/google.golang.org/protobuf/internal/impl/codec_map_go112.go index 1533ef6..0b31b66 100644 --- a/go/vendor/google.golang.org/protobuf/internal/impl/codec_map_go112.go +++ b/go/vendor/google.golang.org/protobuf/internal/impl/codec_map_go112.go @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build go1.12 // +build go1.12 package impl diff --git a/go/vendor/google.golang.org/protobuf/internal/impl/codec_reflect.go b/go/vendor/google.golang.org/protobuf/internal/impl/codec_reflect.go index 90705e3..145c577 100644 --- a/go/vendor/google.golang.org/protobuf/internal/impl/codec_reflect.go +++ b/go/vendor/google.golang.org/protobuf/internal/impl/codec_reflect.go @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build purego || appengine // +build purego appengine package impl diff --git a/go/vendor/google.golang.org/protobuf/internal/impl/codec_unsafe.go b/go/vendor/google.golang.org/protobuf/internal/impl/codec_unsafe.go index e118af1..757642e 100644 --- a/go/vendor/google.golang.org/protobuf/internal/impl/codec_unsafe.go +++ b/go/vendor/google.golang.org/protobuf/internal/impl/codec_unsafe.go @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build !purego && !appengine // +build !purego,!appengine package impl diff --git a/go/vendor/google.golang.org/protobuf/internal/impl/decode.go b/go/vendor/google.golang.org/protobuf/internal/impl/decode.go index 949dc49..c65b032 100644 --- a/go/vendor/google.golang.org/protobuf/internal/impl/decode.go +++ b/go/vendor/google.golang.org/protobuf/internal/impl/decode.go @@ -18,6 +18,7 @@ import ( ) var errDecode = errors.New("cannot parse invalid wire-format data") +var errRecursionDepth = errors.New("exceeded maximum recursion depth") type unmarshalOptions struct { flags protoiface.UnmarshalInputFlags @@ -25,6 +26,7 @@ type unmarshalOptions struct { FindExtensionByName(field protoreflect.FullName) (protoreflect.ExtensionType, error) FindExtensionByNumber(message protoreflect.FullName, field protoreflect.FieldNumber) (protoreflect.ExtensionType, error) } + depth int } func (o unmarshalOptions) Options() proto.UnmarshalOptions { @@ -44,6 +46,7 @@ func (o unmarshalOptions) IsDefault() bool { var lazyUnmarshalOptions = unmarshalOptions{ resolver: preg.GlobalTypes, + depth: protowire.DefaultRecursionLimit, } type unmarshalOutput struct { @@ -62,6 +65,7 @@ func (mi *MessageInfo) unmarshal(in piface.UnmarshalInput) (piface.UnmarshalOutp out, err := mi.unmarshalPointer(in.Buf, p, 0, unmarshalOptions{ flags: in.Flags, resolver: in.Resolver, + depth: in.Depth, }) var flags piface.UnmarshalOutputFlags if out.initialized { @@ -82,6 +86,10 @@ var errUnknown = errors.New("unknown") func (mi *MessageInfo) unmarshalPointer(b []byte, p pointer, groupTag protowire.Number, opts unmarshalOptions) (out unmarshalOutput, err error) { mi.init() + opts.depth-- + if opts.depth < 0 { + return out, errRecursionDepth + } if flags.ProtoLegacy && mi.isMessageSet { return unmarshalMessageSet(mi, b, p, opts) } diff --git a/go/vendor/google.golang.org/protobuf/internal/impl/pointer_reflect.go b/go/vendor/google.golang.org/protobuf/internal/impl/pointer_reflect.go index 9e3ed82..4c491bd 100644 --- a/go/vendor/google.golang.org/protobuf/internal/impl/pointer_reflect.go +++ b/go/vendor/google.golang.org/protobuf/internal/impl/pointer_reflect.go @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build purego || appengine // +build purego appengine package impl diff --git a/go/vendor/google.golang.org/protobuf/internal/impl/pointer_unsafe.go b/go/vendor/google.golang.org/protobuf/internal/impl/pointer_unsafe.go index 9ecf23a..ee0e057 100644 --- a/go/vendor/google.golang.org/protobuf/internal/impl/pointer_unsafe.go +++ b/go/vendor/google.golang.org/protobuf/internal/impl/pointer_unsafe.go @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build !purego && !appengine // +build !purego,!appengine package impl diff --git a/go/vendor/google.golang.org/protobuf/internal/strs/strings_pure.go b/go/vendor/google.golang.org/protobuf/internal/strs/strings_pure.go index 85e074c..a1f6f33 100644 --- a/go/vendor/google.golang.org/protobuf/internal/strs/strings_pure.go +++ b/go/vendor/google.golang.org/protobuf/internal/strs/strings_pure.go @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build purego || appengine // +build purego appengine package strs diff --git a/go/vendor/google.golang.org/protobuf/internal/strs/strings_unsafe.go b/go/vendor/google.golang.org/protobuf/internal/strs/strings_unsafe.go index 2160c70..56a8a4e 100644 --- a/go/vendor/google.golang.org/protobuf/internal/strs/strings_unsafe.go +++ b/go/vendor/google.golang.org/protobuf/internal/strs/strings_unsafe.go @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build !purego && !appengine // +build !purego,!appengine package strs diff --git a/go/vendor/google.golang.org/protobuf/internal/version/version.go b/go/vendor/google.golang.org/protobuf/internal/version/version.go index 14e774f..3d40d52 100644 --- a/go/vendor/google.golang.org/protobuf/internal/version/version.go +++ b/go/vendor/google.golang.org/protobuf/internal/version/version.go @@ -52,8 +52,8 @@ import ( // 10. Send out the CL for review and submit it. const ( Major = 1 - Minor = 27 - Patch = 1 + Minor = 28 + Patch = 0 PreRelease = "" ) diff --git a/go/vendor/google.golang.org/protobuf/proto/decode.go b/go/vendor/google.golang.org/protobuf/proto/decode.go index 49f9b8c..11bf717 100644 --- a/go/vendor/google.golang.org/protobuf/proto/decode.go +++ b/go/vendor/google.golang.org/protobuf/proto/decode.go @@ -42,18 +42,25 @@ type UnmarshalOptions struct { FindExtensionByName(field protoreflect.FullName) (protoreflect.ExtensionType, error) FindExtensionByNumber(message protoreflect.FullName, field protoreflect.FieldNumber) (protoreflect.ExtensionType, error) } + + // RecursionLimit limits how deeply messages may be nested. + // If zero, a default limit is applied. + RecursionLimit int } // Unmarshal parses the wire-format message in b and places the result in m. // The provided message must be mutable (e.g., a non-nil pointer to a message). func Unmarshal(b []byte, m Message) error { - _, err := UnmarshalOptions{}.unmarshal(b, m.ProtoReflect()) + _, err := UnmarshalOptions{RecursionLimit: protowire.DefaultRecursionLimit}.unmarshal(b, m.ProtoReflect()) return err } // Unmarshal parses the wire-format message in b and places the result in m. // The provided message must be mutable (e.g., a non-nil pointer to a message). func (o UnmarshalOptions) Unmarshal(b []byte, m Message) error { + if o.RecursionLimit == 0 { + o.RecursionLimit = protowire.DefaultRecursionLimit + } _, err := o.unmarshal(b, m.ProtoReflect()) return err } @@ -63,6 +70,9 @@ func (o UnmarshalOptions) Unmarshal(b []byte, m Message) error { // This method permits fine-grained control over the unmarshaler. // Most users should use Unmarshal instead. func (o UnmarshalOptions) UnmarshalState(in protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + if o.RecursionLimit == 0 { + o.RecursionLimit = protowire.DefaultRecursionLimit + } return o.unmarshal(in.Buf, in.Message) } @@ -86,12 +96,17 @@ func (o UnmarshalOptions) unmarshal(b []byte, m protoreflect.Message) (out proto Message: m, Buf: b, Resolver: o.Resolver, + Depth: o.RecursionLimit, } if o.DiscardUnknown { in.Flags |= protoiface.UnmarshalDiscardUnknown } out, err = methods.Unmarshal(in) } else { + o.RecursionLimit-- + if o.RecursionLimit < 0 { + return out, errors.New("exceeded max recursion depth") + } err = o.unmarshalMessageSlow(b, m) } if err != nil { diff --git a/go/vendor/google.golang.org/protobuf/proto/proto_methods.go b/go/vendor/google.golang.org/protobuf/proto/proto_methods.go index d8dd604..465e057 100644 --- a/go/vendor/google.golang.org/protobuf/proto/proto_methods.go +++ b/go/vendor/google.golang.org/protobuf/proto/proto_methods.go @@ -3,6 +3,7 @@ // license that can be found in the LICENSE file. // The protoreflect build tag disables use of fast-path methods. +//go:build !protoreflect // +build !protoreflect package proto diff --git a/go/vendor/google.golang.org/protobuf/proto/proto_reflect.go b/go/vendor/google.golang.org/protobuf/proto/proto_reflect.go index b103d43..494d6ce 100644 --- a/go/vendor/google.golang.org/protobuf/proto/proto_reflect.go +++ b/go/vendor/google.golang.org/protobuf/proto/proto_reflect.go @@ -3,6 +3,7 @@ // license that can be found in the LICENSE file. // The protoreflect build tag disables use of fast-path methods. +//go:build protoreflect // +build protoreflect package proto diff --git a/go/vendor/google.golang.org/protobuf/reflect/protoreflect/methods.go b/go/vendor/google.golang.org/protobuf/reflect/protoreflect/methods.go index 6be5d16..d5d5af6 100644 --- a/go/vendor/google.golang.org/protobuf/reflect/protoreflect/methods.go +++ b/go/vendor/google.golang.org/protobuf/reflect/protoreflect/methods.go @@ -53,6 +53,7 @@ type ( FindExtensionByName(field FullName) (ExtensionType, error) FindExtensionByNumber(message FullName, field FieldNumber) (ExtensionType, error) } + Depth int } unmarshalOutput = struct { pragma.NoUnkeyedLiterals diff --git a/go/vendor/google.golang.org/protobuf/reflect/protoreflect/value_pure.go b/go/vendor/google.golang.org/protobuf/reflect/protoreflect/value_pure.go index 918e685..7ced876 100644 --- a/go/vendor/google.golang.org/protobuf/reflect/protoreflect/value_pure.go +++ b/go/vendor/google.golang.org/protobuf/reflect/protoreflect/value_pure.go @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build purego || appengine // +build purego appengine package protoreflect diff --git a/go/vendor/google.golang.org/protobuf/reflect/protoreflect/value_union.go b/go/vendor/google.golang.org/protobuf/reflect/protoreflect/value_union.go index 5a34147..eb7764c 100644 --- a/go/vendor/google.golang.org/protobuf/reflect/protoreflect/value_union.go +++ b/go/vendor/google.golang.org/protobuf/reflect/protoreflect/value_union.go @@ -41,6 +41,31 @@ import ( // Converting to/from a Value and a concrete Go value panics on type mismatch. // For example, ValueOf("hello").Int() panics because this attempts to // retrieve an int64 from a string. +// +// List, Map, and Message Values are called "composite" values. +// +// A composite Value may alias (reference) memory at some location, +// such that changes to the Value updates the that location. +// A composite value acquired with a Mutable method, such as Message.Mutable, +// always references the source object. +// +// For example: +// // Append a 0 to a "repeated int32" field. +// // Since the Value returned by Mutable is guaranteed to alias +// // the source message, modifying the Value modifies the message. +// message.Mutable(fieldDesc).(List).Append(protoreflect.ValueOfInt32(0)) +// +// // Assign [0] to a "repeated int32" field by creating a new Value, +// // modifying it, and assigning it. +// list := message.NewField(fieldDesc).(List) +// list.Append(protoreflect.ValueOfInt32(0)) +// message.Set(fieldDesc, list) +// // ERROR: Since it is not defined whether Set aliases the source, +// // appending to the List here may or may not modify the message. +// list.Append(protoreflect.ValueOfInt32(0)) +// +// Some operations, such as Message.Get, may return an "empty, read-only" +// composite Value. Modifying an empty, read-only value panics. type Value value // The protoreflect API uses a custom Value union type instead of interface{} diff --git a/go/vendor/google.golang.org/protobuf/reflect/protoreflect/value_unsafe.go b/go/vendor/google.golang.org/protobuf/reflect/protoreflect/value_unsafe.go index c45debd..702ddf2 100644 --- a/go/vendor/google.golang.org/protobuf/reflect/protoreflect/value_unsafe.go +++ b/go/vendor/google.golang.org/protobuf/reflect/protoreflect/value_unsafe.go @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build !purego && !appengine // +build !purego,!appengine package protoreflect diff --git a/go/vendor/google.golang.org/protobuf/runtime/protoiface/methods.go b/go/vendor/google.golang.org/protobuf/runtime/protoiface/methods.go index 32c04f6..44cf467 100644 --- a/go/vendor/google.golang.org/protobuf/runtime/protoiface/methods.go +++ b/go/vendor/google.golang.org/protobuf/runtime/protoiface/methods.go @@ -103,6 +103,7 @@ type UnmarshalInput = struct { FindExtensionByName(field protoreflect.FullName) (protoreflect.ExtensionType, error) FindExtensionByNumber(message protoreflect.FullName, field protoreflect.FieldNumber) (protoreflect.ExtensionType, error) } + Depth int } // UnmarshalOutput is output from the Unmarshal method. diff --git a/go/vendor/modules.txt b/go/vendor/modules.txt index e4be075..719facb 100644 --- a/go/vendor/modules.txt +++ b/go/vendor/modules.txt @@ -1,8 +1,8 @@ # github.com/golang/protobuf v1.5.2 ## explicit; go 1.9 github.com/golang/protobuf/ptypes/timestamp -# google.golang.org/protobuf v1.27.1 -## explicit; go 1.9 +# google.golang.org/protobuf v1.28.0 +## explicit; go 1.11 google.golang.org/protobuf/encoding/prototext google.golang.org/protobuf/encoding/protowire google.golang.org/protobuf/internal/descfmt