Skip to content

Releases: protocolbuffers/protobuf

Protocol Buffers v3.9.0

12 Jul 16:32
6a59a2a
Compare
Choose a tag to compare

C++

  • Optimize and simplify implementation of RepeatedPtrFieldBase
  • Don't create unnecessary unknown field sets.
  • Remove branch from accessors to repeated field element array.
  • Added delimited parse and serialize util.
  • Reduce size by not emitting constants for fieldnumbers
  • Fix a bug when comparing finite and infinite field values with explicit tolerances.
  • TextFormat::Parser should use a custom Finder to look up extensions by number if one is provided.
  • Add MessageLite::Utf8DebugString() to make MessageLite more compatible with Message.
  • Fail fast for better performance in DescriptorPool::FindExtensionByNumber() if descriptor has no defined extensions.
  • Adding the file name to help debug colliding extensions
  • Added FieldDescriptor::PrintableNameForExtension() and DescriptorPool::FindExtensionByPrintableName().
    The latter will replace Reflection::FindKnownExtensionByName().
  • Replace NULL with nullptr
  • Created a new Add method in repeated field that allows adding a range of elements all at once.
  • Enabled enum name-to-value mapping functions for C++ lite
  • Avoid dynamic initialization in descriptor.proto generated code
  • Move stream functions to MessageLite from Message.
  • Move all zero_copy_stream functionality to io_lite.
  • Do not create array of matched fields for simple repeated fields
  • Enabling silent mode by default to reduce make compilation noise. (#6237)

Java

  • Expose TextFormat.Printer and make it configurable. Deprecate the static methods.
  • Library for constructing google.protobuf.Struct and google.protobuf.Value
  • Make OneofDescriptor extend GenericDescriptor.
  • Expose streamingness of service methods from MethodDescriptor.
  • Fix a bug where TextFormat fails to parse Any filed with > 1 embedded message sub-fields.
  • Establish consistent JsonFormat behavior for nulls in oneofs, regardless of order.
  • Update GSON version to 3.8.5. (#6268)
  • Add protobuf_java_lite Bazel target. (#6177)

Python

  • Change implementation of Name() for enums that allow aliases in proto2 in Python
    to be in line with claims in C++ implementation (to return first value).
  • Explicitly say what field cannot be set when the new value fails a type check.
  • Duplicate register in descriptor pool will raise errors
  • Add slots to all well_known_types classes, custom attributes are not allowed anymore.
  • text_format only present 8 valid digits for float fields by default

JavaScript

  • Add Oneof enum to the list of goog.provide

PHP

  • Rename get/setXXXValue to get/setXXXWrapper. (#6295)

Ruby

  • Remove to_hash methods. (#6166)

Protocol Buffers v3.9.0-rc1

26 Jun 18:29
3f33753
Compare
Choose a tag to compare
Pre-release
Merge pull request #6298 from TeBoring/3.9.x-merge

Merge master into 3.9.x

Protocol Buffers v3.8.0

28 May 23:00
0974557
Compare
Choose a tag to compare

C++

  • Use std::atomic in case of myriad2 platform
  • Always declare enums to be int-sized
  • Added DebugString() and ShortDebugString() methods on MessageLite
  • Specialized different parse loop control flows
  • Make hasbits potentially in register. The or's start forming an obstacle because it's a read modify store on the same mem address on each iteration.
  • Move to an internal MACRO for parser validity checks.
  • Improve map parsing performance.
  • Make MergePartialFromCodedStream non virtual. This allows direct calls, potential inlining and is also a code health improvement
  • Add an overall limit to parse_context to prevent reading past it. This allows to remove a annoying level of indirection.
  • Fix a mistake, we shouldn't verify map key/value strings for utf8 in opt mode for proto2.
  • Further improvements to cut binary size.
  • Prepare to make MergePartialFromCodedStream non-virtual.
  • A report on some interesting behavior change in python (caused by b/27494216) made me realize there is a check that needs to be done in case the parse ended on a end group tag.
  • Add a note of caution to the comments around skip in CodedOutputStream.
  • Simplify end check.
  • Add overload for ParseMessage for MessageLite/Message types. If the explicit type is not known inlining won't help de-virtualizing the virtual call.
  • Reduce linker input. It turns out that ParseMessage is not inlined, producing template instantiations that are used only once and save nothing but cost more.
  • Improve the parser.
  • [c++17] Changed proto2::RepeatedPtrField iterators to no longer derive from the deprecated std::iterator class.
  • Change the default value of case_insensitive_enum_parsing to false for JsonStringToMessage.
  • Add a warning if a field name doesn't match the style guide.
  • Fix TextFormat not round-trip correctly when float value is max float.
  • Added locationed info for some errors at compiler
  • Python reserved keywords are now working with getattr()/setattr() for most descriptors.
  • Added AllowUnknownField() in text_format
  • Append '_' to C++ reserved keywords for message, enum, extension
  • Fix MSVC warning C4244 in protobuf's parse_context.h.
  • Updating Iterators to be compatible with C++17 in MSVC.
  • Use capability annotation in mutex.h
  • Fix "UndefinedBehaviorSanitizer: cfi-bad-type"
  • CriticalSectionLock class as a lightweight replacement for std::mutex on Windows platforms.
  • Removed vestigial wire_format_lite_inl.h

C#

  • Added System.Memory dependency.

Java

  • Make Java protoc code generator ignore optimize_for LITE_RUNTIME. Users should instead use the Java lite protoc plugin.
  • Change Extension getMessageDefaultInstance() to return Message instead of MessageLite.
  • Prevent malicious input streams from leaking buffers for ByteString or ByteBuffer parsing.
  • Release new Javalite runtime.
  • Show warning in case potential file name conflict.
  • Allow Java reserved keywords to be used in extensions.
  • Added setAllowUnknownFields() in text format
  • Add memoization to ExtensionRegistryLite.getEmptyRegistry()
  • Improve performance of CodedOutputStream.writeUInt32NoTag
  • Add an optimized mismatch-finding algorithm to UnsafeUtil.
  • When serializing uint32 varints, check that we have MAX_VARINT32_SIZE bytes left, not just MAX_VARINT_SIZE.
  • Minor optimization to RopeByteString.PieceIterator

JavaScript

  • Simplify generated toObject code when the default value is used.

Python

  • Changes implementation of Name() for enums that allow aliases in proto2 in Python to be in line with claims in C++ implementation (to return first value).
  • Added double_format option in text format printer.
  • Added iter and contains to extension dict
  • Added allow_unknown_field option in python text format parser
  • Fixed Timestamp.ToDatetime() loses precision issue
  • Support unknown field in text format printer.
  • Float field will be convert to inf if bigger than struct.unpack('f', b'\xff\xff\x7f\x7f')[0] which is about 3.4028234664e+38,
    convert to -inf if smaller than -3.4028234664e+38
  • Allowed casting str->bytes in Message.setstate

Ruby

  • Helper methods to get enum name for Ruby.

Protocol Buffers v3.8.0-rc1

01 May 17:24
9f604ac
Compare
Choose a tag to compare
Pre-release

C++

  • Use std::atomic in case of myriad2 platform
  • Always declare enums to be int-sized
  • Added DebugString() and ShortDebugString() methods on MessageLite
  • Specialized different parse loop control flows
  • Make hasbits potentially in register. The or's start forming an obstacle because it's a read modify store on the same mem address on each iteration.
  • Move to an internal MACRO for parser validity checks.
  • Improve map parsing performance.
  • Make MergePartialFromCodedStream non virtual. This allows direct calls, potential inlining and is also a code health improvement
  • Add an overall limit to parse_context to prevent reading past it. This allows to remove a annoying level of indirection.
  • Fix a mistake, we shouldn't verify map key/value strings for utf8 in opt mode for proto2.
  • Further improvements to cut binary size.
  • Prepare to make MergePartialFromCodedStream non-virtual.
  • A report on some interesting behavior change in python (caused by b/27494216) made me realize there is a check that needs to be done in case the parse ended on a end group tag.
  • Add a note of caution to the comments around skip in CodedOutputStream.
  • Simplify end check.
  • Add overload for ParseMessage for MessageLite/Message types. If the explicit type is not known inlining won't help de-virtualizing the virtual call.
  • Reduce linker input. It turns out that ParseMessage is not inlined, producing template instantiations that are used only once and save nothing but cost more.
  • Improve the parser.
  • [c++17] Changed proto2::RepeatedPtrField iterators to no longer derive from the deprecated std::iterator class.
  • Change the default value of case_insensitive_enum_parsing to false for JsonStringToMessage.
  • Add a warning if a field name doesn't match the style guide.
  • Fix TextFormat not round-trip correctly when float value is max float.
  • Added locationed info for some errors at compiler
  • Python reserved keywords are now working with getattr()/setattr() for most descriptors.
  • Added AllowUnknownField() in text_format
  • Append '_' to C++ reserved keywords for message, enum, extension
  • Fix MSVC warning C4244 in protobuf's parse_context.h.
  • Updating Iterators to be compatible with C++17 in MSVC.
  • Use capability annotation in mutex.h
  • Fix "UndefinedBehaviorSanitizer: cfi-bad-type"
  • CriticalSectionLock class as a lightweight replacement for std::mutex on Windows platforms.
  • Removed vestigial wire_format_lite_inl.h

C#

  • Added System.Memory dependency.

Java

  • Make Java protoc code generator ignore optimize_for LITE_RUNTIME. Users should instead use the Java lite protoc plugin.
  • Change Extension getMessageDefaultInstance() to return Message instead of MessageLite.
  • Prevent malicious input streams from leaking buffers for ByteString or ByteBuffer parsing.
  • Release new Javalite runtime.
  • Show warning in case potential file name conflict.
  • Allow Java reserved keywords to be used in extensions.
  • Added setAllowUnknownFields() in text format
  • Add memoization to ExtensionRegistryLite.getEmptyRegistry()
  • Improve performance of CodedOutputStream.writeUInt32NoTag
  • Add an optimized mismatch-finding algorithm to UnsafeUtil.
  • When serializing uint32 varints, check that we have MAX_VARINT32_SIZE bytes left, not just MAX_VARINT_SIZE.
  • Minor optimization to RopeByteString.PieceIterator

JavaScript

  • Simplify generated toObject code when the default value is used.

Python

  • Changes implementation of Name() for enums that allow aliases in proto2 in Python to be in line with claims in C++ implementation (to return first value).
  • Added double_format option in text format printer.
  • Added iter and contains to extension dict
  • Added allow_unknown_field option in python text format parser
  • Fixed Timestamp.ToDatetime() loses precision issue
  • Support unknown field in text format printer.
  • Float field will be convert to inf if bigger than struct.unpack('f', b'\xff\xff\x7f\x7f')[0] which is about 3.4028234664e+38,
    convert to -inf if smaller than -3.4028234664e+38
  • Allowed casting str->bytes in Message.setstate

Ruby

  • Helper methods to get enum name for Ruby.

Protocol Buffers v3.7.1

26 Mar 16:40
6973c3a
Compare
Choose a tag to compare

C++

  • Avoid linking against libatomic in prebuilt protoc binaries (#5875)
  • Avoid marking generated C++ messages as final, though we will do this in a future release (#5928)
  • Miscellaneous build fixes

JavaScript

  • Fixed redefinition of global variable f (#5932)

Ruby

  • Replace strptime with custom implementation (#5906)
  • Fixed the bug that bytes fields cannot be larger than 16000 bytes (#5924)
  • Miscellaneous bug fixes

PHP

  • Replace strptime with custom implementation (#5906)
  • Fixed the bug that bytes fields cannot be larger than 16000 bytes (#5924)

Protocol Buffers v3.7.0

28 Feb 21:33
582743b
Compare
Choose a tag to compare

C++

  • Introduced new MOMI (maybe-outside-memory-interval) parser.
  • Add an option to json_util to parse enum as case-insensitive. In the future, enum parsing in json_util will become case-sensitive.
  • Added conformance test for enum aliases
  • Added support for --cpp_out=speed:...
  • Added use of C++ override keyword where appropriate
  • Many other cleanups and fixes.

Java

  • Fix illegal reflective access warning in JDK 9+
  • Add BOM

Python

  • Added Python 3.7 compatibility.
  • Modified ParseFromString to return bytes parsed .
  • Introduce Proto C API.
  • FindFileContainingSymbol in descriptor pool is now able to find field and enum values.
  • reflection.MakeClass() and reflection.ParseMessage() are deprecated.
  • Added DescriptorPool.FindMethodByName() method in pure python (c extension alreay has it)
  • Flipped proto3 to preserve unknown fields by default.
  • Added support for memoryview in python3 proto message parsing.
  • Added MergeFrom for repeated scalar fields in c extension (pure python already has it)
  • Surrogates are now rejected at setters in python3.
  • Added public unknown field API.
  • RecursionLimit is also set to max if allow_oversize_protos is enabled.
  • Disallow duplicate scalars in proto3 text_format parse.
  • Fix some segment faults for c extension map field.

PHP

  • Most issues for json encoding/decoding in the c extension have been fixed. There are still some edge cases not fixed. For more details, check conformance/failure_list_php_c.txt.
  • Supports php 7.3
  • Added helper methods to convert between enum values and names.
  • Allow setting/getting wrapper message fields using primitive values.
  • Various bug fixes.

Ruby

  • Ruby 2.6 support.
  • Drops support for ruby < 2.3.
  • Most issues for json encoding/decoding in the c extension have been fixed. There are still some edge cases not fixed. For more details, check conformance/failure_list_ruby.txt.
  • Json parsing can specify an option to ignore unknown fields: msg.decode_json(data, {ignore_unknown_fields: true}).
  • Added support for proto2 syntax (partially).
  • Various bug fixes.

C#

  • More support for FieldMask include merge, intersect and more.
  • Increasing the default recursion limit to 100.
  • Support loading FileDescriptors dynamically.
  • Provide access to comments from descriptors.
  • Added Any.Is method.
  • Compatible with C# 6
  • Added IComparable and comparison operators on Timestamp.

Objective-C

  • Add ability to introspect list of enum values (#4678)
  • Copy the value when setting message/data fields (#5215)
  • Support suppressing the objc package prefix checks on a list of files (#5309)
  • More complete keyword and NSObject method (via categories) checks for field names, can result in more fields being rename, but avoids the collisions at runtime (#5289)
  • Small fixes to TextFormat generation for extensions (#5362)
  • Provide more details/context in deprecation messages (#5412)
  • Array/Dictionary enumeration blocks NS_NOESCAPE annotation for Swift (#5421)
  • Properly annotate extensions for ARC when their names imply behaviors (#5427)
  • Enum alias name collision improvements (#5480)

Protocol Buffers v3.7.0-rc.3

22 Feb 23:11
580e189
Compare
Choose a tag to compare
Pre-release
Merge pull request #5766 from TeBoring/3.7.x-fix

Update version number to 3.7.0rc3

Protocol Buffers v3.7.0rc2

01 Feb 20:04
Compare
Choose a tag to compare
Pre-release
Fixed infinite recursion problem with Java GeneratedMessageV3 (#5657)

GeneratedMessageV3#setUnknownFieldsProto3 was trying to delegate to
setUnknownFields but was inadvertently resulting in infinite recursion.
This commit makes setUnknownFields and setUnknownFieldsProto3 delegate
to a common private method to fix the problem and avoid confusion.

Protocol Buffers v3.7.0rc1

30 Jan 19:48
74f667d
Compare
Choose a tag to compare
Pre-release
Merge pull request #5644 from TeBoring/fix-4765

Convert integer to string if field is string field in json

Protocol Buffers v3.6.1

31 Jul 19:02
Compare
Choose a tag to compare

C++

  • Introduced workaround for Windows issue with std::atomic and std::once_flag initialization (#4777, #4773)

PHP

  • Added compatibility with PHP 7.3 (#4898)

Ruby

  • Fixed Ruby crash involving Any encoding (#4718)