Releases: protocolbuffers/protobuf-go
all: release v1.34.1
all: release v1.34.0
Notable changes
New Features
Protobuf editions are fully supported. You can now use edition = "2023"
in .proto files together with the proto-gen-go
. Edition2023 does not introduce any new features but can be used to replace syntax "proto2/3"
. Future editions might introduce new features. See https://protobuf.dev/editions/overview/ for more details on protobuf editions.
Documentation
Various smaller changes to improve existing documentation and to add more examples.
- CL/574455: proto: extend Marshal documentation, include an example
- CL/574635: proto: extend Unmarshal documentation, include an example
- CL/574836: protogen: update Options documentation.
- CL/573361: proto: add examples for Size, MarshalAppend (regarding allocations)
- CL/579895: encoding/{protojson,prototext}: strengthen wording on stability
Extensions
These are mostly performance improvements or preparations for performance improvements.
- CL/575035: internal/impl: ensure proto.HasExtension does not allocate
- CL/576315: [encoding/{protojson,prototext}: strengthen wording on stability](proto: CSE ProtoReflect() and TypeDescriptor() in proto.HasExtension
- CL/576316: internal/impl: pass ExtensionTypeDescriptor to extensionMap
- CL/579275: [proto] use the correct parent when resolving features for extensions
- CL/579595: proto: return an error instead of producing invalid wire format
v1.33.0
This release contains one security fix:
encoding/protojson
:Unmarshal
could enter an infinite loop when unmarshaling certain forms of invalid JSON. This condition can occur when unmarshaling into a message which contains agoogle.protobuf.Any
value, or when theUnmarshalOptions.DiscardUnknown
option is set.Unmarshal
now correctly returns an error when handling these inputs. This is CVE-2024-24786.
v1.32.0
Full Changelog: v1.31.0...v1.32.0
This release contains commit bfcd647, which fixes a denial of service vulnerability by preventing a stack overflow through a default maximum recursion limit. See golang/protobuf#1583 and golang/protobuf#1584 for details.
v1.31.0
Notable changes
New Features
- CL/489316: types/dynamicpb: add NewTypes
- Add a function to construct a dynamic type registry from a protoregistry.Files
- CL/489615: encoding: add MarshalAppend to protojson and prototext
Minor performance improvements
- CL/491596: encoding/protodelim: If UnmarshalFrom gets a bufio.Reader, try to reuse its buffer instead of creating a new one
- CL/500695: proto: store the size of tag to avoid multiple calculations
Bug fixes
v1.30.0
Announcement
In the previous two releases, v1.29.0 and v1.29.1, we associated the tags with the wrong commits and thus the tags do not reference any commit in this repository. This tag, v1.30.0, refers to an existing commit again. Sorry for the inconvenience.
Notable changes
New Features
- CL/449576: protoadapt: helper functions to convert v1 or v2 message to either v1 or v2 message.
v1.29.1
v1.29.0
Overview
This version introduces a new package protodelim
to marshal and unmarshal size-delimited messages.
It also brings the implementation up to date with the latest protobuf features.
Notable changes
New Features
- CL/419254: encoding: add protodelim package
- CL/450775: reflect/protoreflect: add Value.Equal method
- CL/462315: cmd/protoc-gen-go: make deprecated messages more descriptive
- CL/473015: encoding/prototext: allow whitespace and comments between minus sign and number in negative numeric literal
Alignment with protobuf
- CL/426054: types/descriptorpb: update *.pb.go to use latest protoc release, 21.5
- CL/425554: encoding/protojson: fix parsing of google.protobuf.Timestamp
- CL/461238: protobuf: remove the check for reserved field numbers
- CL/469255: types/descriptorpb: regenerate using latest protobuf v22.0 release
- CL/472696: cmd/protoc-gen-go: support protobuf retention feature
Documentation improvements:
- CL/464275: proto: document Equal behavior of invalid messages
- CL/466375: all: update links to Protocol Buffer documentation
Minor performance improvements
- CL/460215: types/known/structpb: preallocate map in AsMap
- CL/465115: internal/strs: avoid unnecessary allocations in Builder
Breaking changes
- CL/461238: protobuf: remove the check for reserved field numbers
- protowire.(Number).IsValid() no longer returns false for reserved fields because reserved fields are considered semantically valid by the protobuf spec.
v1.28.1
v1.28.0
Overview
The release provides a new unmarshal option for limiting the recursion depth when unmarshalling nested messages to prevent stack overflows. (UnmarshalOptions.RecursionLimit
).
Notable changes
New features:
- CL/340489: testing/protocmp: add Message.Unwrap
Documentation improvements:
- CL/339569: reflect/protoreflect: add more docs on Value aliasing
Updated supported versions:
- CL/370055: all: update supported versions
UnmarshalOption RecursionLimit
- CL/385854: all: implement depth limit for unmarshalling
The new UnmarshalOptions.RecursionLimit
limits the maximum recursion depth when unmarshalling messages. The limit is applied for nested messages. When messages are nested deeper than the specified limit the unmarshalling will fail. If unspecified, a default limit of 10,000 is applied.
In addition to the configurable limit for message nesting a non-configurable recursion limit for group nesting of 10,000 was introduced.
Upcoming breakage changes
The default recursion limit of 10,000 introduced in the release is subject to change. We want to align this limit with implementations for other languages in the long term. C++ and Java use a limit of 100 which is also the target for the Go implementation.