Protocol Compiler
- The proto compiler no longer requires a .proto filename when it is not
generating code. - Added flag
--deterministic_output
toprotoc --encode=...
. - Fixed deadlock when using google.protobuf.Any embedded in aggregate options.
C++
- Arenas are now unconditionally enabled. cc_enable_arenas no longer has
any effect. - Removed inlined string support, which is incompatible with arenas.
- Fix a memory corruption bug in reflection when mixing optional and
non-optional fields. - Make SpaceUsed() calculation more thorough for map fields.
- Add stack overflow protection for text format with unknown field values.
- FieldPath::FollowAll() now returns a bool to signal if an out-of-bounds
error was encountered. - Performance improvements for Map.
- Minor formatting fix when dumping a descriptor to .proto format with
DebugString. - UBSAN fix in RepeatedField (#2073).
- When running under ASAN, skip a test that makes huge allocations.
- Fixed a crash that could happen when creating more than 256 extensions in
a single message. - Fix a crash in BuildFile when passing in invalid descriptor proto.
- Parser security fix when operating with CodedInputStream.
- Warn against the use of AllowUnknownExtension.
- Migrated to C++11 for-range loops instead of index-based loops where
possible. This fixes a lot of warnings when compiling with -Wsign-compare. - Fix segment fault for proto3 optional (#7805)
- Adds a CMake option to build
libprotoc
separately (#7949)
Java
- Bugfix in mergeFrom() when a oneof has multiple message fields.
- Fix RopeByteString.RopeInputStream.read() returning -1 when told to read
0 bytes when not at EOF. - Redefine remove(Object) on primitive repeated field Lists to avoid
autoboxing. - Support "\u" escapes in textformat string literals.
- Trailing empty spaces are no longer ignored for FieldMask.
- Fix FieldMaskUtil.subtract to recursively remove mask.
- Mark enums with
@java.lang.Deprecated
if the proto enum has option
deprecated = true;
. - Adding forgotten duration.proto to the lite library (#7738)
Python
- Print google.protobuf.NullValue as null instead of "NULL_VALUE" when it is
used outside WKT Value/Struct. - Fix bug occurring when attempting to deep copy an enum type in python 3.
- Add a setuptools extension for generating Python protobufs (#7783)
- Remove uses of pkg_resources in non-namespace packages. (#7902)
- [bazel/py] Omit google/init.py from the Protobuf runtime. (#7908)
- Removed the unnecessary setuptools package dependency for Python package (#7511)
- Fix PyUnknownFields memory leak (#7928)
PHP
- Added support for "==" to the PHP C extension (#7883)
- Added
==
operators for Map and Array. (#7900) - Native C well-known types (#7944)
- Optimized away hex2bin() call in generated code (#8006)
- New version of upb, and a new hash function wyhash in third_party. (#8000)
- add missing hasOneof method to check presence of oneof fields (#8003)
Go
- Update go_package options to reference google.golang.org/protobuf module.
C#
- annotate ByteString.CopyFrom(ReadOnlySpan) as SecuritySafeCritical (#7701)
- Fix C# optional field reflection when there are regular fields too (#7705)
- Fix parsing negative Int32Value that crosses segment boundary (#8035)
Javascript
- JS: parse (un)packed fields conditionally (#7379)