protobuf v3.14.0 Release Notes

Release Date: 2020-11-13 // 5 months ago
  • Protocol Compiler

    • The proto compiler no longer requires a .proto filename when it is not
      generating code.
    • โž• Added flag --deterministic_output to protoc --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)