Skip to content

Releases: protocolbuffers/protobuf

Protocol Buffers v23.0-rc1 (Incomplete)

26 Apr 23:16
Compare
Choose a tag to compare
Pre-release

Announcements

  • This RC was abandoned before artifact publishing due to unintended breaking changes:
    • [Cpp] lock down visibility for FileDescriptor syntax APIs. (8b1be51)
    • [Java] Lock down visibility for FileDescriptor.getSyntax(). (8c8b2be)
    • [Ruby] Lock down visibility for FileDescriptor.getSyntax(). (8c8b2be)
  • Protobuf News may include additional announcements or pre-announcements for upcoming changes.

Compiler

  • Implement a retain_options flag in protoc. (83507c7)
  • Make protoc --descriptor_set_out respect option retention (ae2531d)
  • Modify release artifacts for protoc to statically link system libraries. (723bd4c)
  • Extension declaration: Enforce that if the extension range has a declaration then all extensions in that range must be declared. This should prevent non-declared extensions from being added. (5dc171f)
  • Implement "reserved" for extension declaration. (41287bd)
  • Open-source extension declaration definition. (145900f)

C++

  • Breaking change: lock down visibility for FileDescriptor syntax APIs. (8b1be51)
  • Remove PROTOBUF_DEPRECATED in favor of [[deprecated]]. (5c59290)
  • Add assert to the list of keywords for C++. (a75c1a2)
  • Added Reflection::GetCord() method in C++ (6ecb5d0)
  • Support C++ protobuf ctype=CORD for bytes field (generated code). (714f975)
  • Expand LazySerializerEmitter to cover proto3 cases. (fab7f92)
  • Unconditionally generate unknown field accessors. (dd8a3cf)
  • Introduce proto filter for inject_field_listener_events. (2dc5338)
  • Add ParseFromCord to TextFormat (055a6c6)
  • Mark proto2::Arena::GetArena as deprecated. (9f95958)

Java

  • Adds Timestamps.now(). (295f112)
  • Breaking change: Lock down visibility for FileDescriptor.getSyntax(). (8c8b2be)
  • Added Reflection::GetCord() method in C++ (6ecb5d0)
  • Re-attach OSGI headers to lite,core, and util. This information was dropped in the move from maven to bazel. (4b5652b)
  • Add Java FileDescriptor.copyHeadingTo() which copies file-level settings (e.g. syntax, package, file options) to FileDescriptorProto.Builder (6e6d0bc)
  • Remove unnecessary has bits from proto2 Java. (c440da9)
  • Add casts to make protobuf compatible with Java 1.8 runtime. (d40aadf)
  • Fix mutability bug in Java proto lite: sub-messages inside of oneofs were not (fa82155)
  • Document known quirks of EnumDescriptor::is_closed() when importing across files with different syntaxes. (1de344f)

Kotlin

  • Remove errorprone dependency from kotlin protos. (7b6e828)

Csharp

  • Make json_name take priority over name (fully) in C# parsing (#12262) (4326e0f)
  • Add C# presence methods to proto3 oneof fields. (affadac)

Objective-C

  • Enforce the max message size when serializing to binary form. (e6d01b2)
  • mark mergeFromData:extensionRegistry: as deprecated. (e3b0051)

Python

  • Make numpy/pip_deps a test-only dependency. (fe038fc)
  • Mark sequence containers as Py_TPFLAGS_SEQUENCE, enabling pattern matching (a05c57d)
  • Fix Python bug with required fields (579f4ab)
  • Mark deprecated SupportsUnknownEnumValues on Message reflection. Use FieldDescriptor or EnumDescriptor instead. (0b9134b)
  • Raise warnings for MessageFactory class usages (dd9dd86)
  • Add Python support for retention attribute (63389c0)
  • Document known quirks of EnumDescriptor::is_closed() when importing across files with different syntaxes. (1de344f)

Python C-Extension (Default)

  • Fix Python bug with required fields (protocolbuffers/upb@ea4cb79)
  • See also UPB changes below, which may affect Python C-Extension (Default).

PHP

PHP C-Extension

  • RepeatedField: unset by index (#11425) (363fa89)
  • See also UPB changes below, which may affect PHP C-Extension.

Ruby

  • Change the Ruby code generator to emit a serialized proto instead of the DSL (#12319) (bd52d04)
  • Breaking change: Lock down visibility for FileDescriptor.getSyntax(). (8c8b2be)
  • Feat(6178): emit ruby enum as integer (#11673) (8aa2b17)

Ruby C-Extension

  • Feat(6178): emit ruby enum as integer (#11673) (8aa2b17)
  • Ruby: Implement Write Barriers (#11793) (d82d8a4)
  • See also UPB changes below, which may affect Ruby C-Extension.

UPB (Python/PHP/Ruby C-Extension)

Other

  • Fix btree issue in map tests. (9898418)
  • Fix declared dependencies for pkg-config (#12518) (f79e35c)
  • Fix build for newlib (#12501) (945bf3c)
  • Update usage disclaimer on FieldOptions.ctype (b8e7192)
  • Add config option to print 64-bit integers in JSON as unquoted ints if they can be losslessly converted into a 64-bit float. (330e10d)
  • Version protoc according to the compiler version number. (e67136d)
  • Fix shared object ABI exports (#5144) (#11032) (462964e)
  • Ensure VarintParseSlowArm{32,64} are exported with PROTOBUF_EXPORT (2ce5639)
  • Update the min required CMake version to 3.10 (bcb20bb)

Protocol Buffers v22.3

12 Apr 23:47
Compare
Choose a tag to compare

Announcements

  • Protobuf News may include additional announcements or pre-announcements for upcoming changes.

UPB (Python/PHP/Ruby C-Extension)

Other

  • Fix .gitmodules to use the correct absl branch (f51da1f)
  • Remove erroneous dependency on googletest (#12276)

Protocol Buffers v22.2

10 Mar 18:35
Compare
Choose a tag to compare

Announcements

  • This release was only published for Java and Ruby.
  • Protobuf News may include additional announcements or pre-announcements for upcoming changes.

Java

  • Add version to intra proto dependencies and add kotlin stdlib dependency (99ed010)
  • Add $ back for osgi header (d80c12d)
  • Remove $ in pom files (8ac2337)

Kotlin

  • Add version to intra proto dependencies and add kotlin stdlib dependency (99ed010)
  • Remove $ in pom files (8ac2337)

Protocol Buffers v22.1

07 Mar 22:31
Compare
Choose a tag to compare

Announcements

  • Protobuf News may include additional announcements or pre-announcements for upcoming changes.

Compiler

  • Modify release artifacts for protoc to statically link system libraries. (8ad6cdd)
  • Add visibility of plugin.proto to python directory (620d21a)
  • Strip "src" from file name of plugin.proto (9c89a70)

Java

  • Add OSGi headers to pom files. (e909bfc)

Kotlin

  • Remove errorprone dependency from kotlin protos. (66f80c3)

Other

  • Version protoc according to the compiler version number. (b143586)

Protocol Buffers v22.0

16 Feb 18:17
Compare
Choose a tag to compare

Announcements

  • This version includes breaking changes to: Cpp.

    • [Cpp] Migrate to Abseil's logging library. (a9f1ea6)
    • [Cpp] proto2::Map::value_type changes to std::pair<const K, V>. (46656ed)
    • [Cpp] Mark final ZeroCopyInputStream, ZeroCopyOutputStream, and DefaultFieldComparator classes. (bf9c22e)
    • [Cpp] Add a dependency on Abseil (#10416)
    • [Cpp] Remove all autotools usage (#10132)
    • [Cpp] Add C++20 reserved keywords
    • [Cpp] Dropped C++11 Support
    • [Cpp] Delete Arena::Init
    • [Cpp] Replace JSON parser with new implementation
    • [Cpp] Make RepeatedField::GetArena non-const in order to support split RepeatedFields.
  • You can refer to our migration guide for details on what C++ code changes will be necessary to be compatible with 22.0.

  • Protobuf News may include additional announcements or pre-announcements for upcoming changes.

Compiler

  • Breaking change: Migrate to Abseil's logging library. (a9f1ea6)
  • Add debug_redact field option to protobuf. (9238c48)
  • Protoc: accept capital X to indicate hex escape in string literals (#10757)
  • Gracefully handle weird placement of linebreaks around comments (#10660)
  • Open up visibility for some compiler internals (#10608)
  • Protoc: validate reserved names are identifiers (#10586)
  • Protoc: validate custom json_name configuration (#10581)
  • Protoc: fix consistency with parsing very large decimal numbers (#10555)
  • Use protoc version for --version (#10386)
  • Fix for grpc.tools #17995 & protobuf #7474 (handle UTF-8 paths in argumentfile) (#10200)
  • Print full path name of source .proto file on error
  • Include proto message type in the annotation comments.
  • Maven artifact suffix format has changed to -RCN instead of -rc-N

C++

  • Document known quirks of EnumDescriptor::is_closed() when importing across files with different syntaxes. (a594141)
  • Add C++ support for retention attribute (8f882e7)
  • Breaking change: Migrate to Abseil's logging library. (a9f1ea6)
  • No longer define no_threadlocal on OpenBSD (#10610)
  • CMake: Enable projects to set the C++ version (#10464)
  • Breaking Change: Add a dependency on Abseil (#10416)
  • Upgrade third_party/googletest submodule to current main branch (#10393)
  • Breaking Change: Remove all autotools usage (#10132)
  • CMake: use add_compile_options instead of add_definitions for compile options (#10293)
  • Fix #9947: make the ABI identical between debug and non-debug builds (#10271)
  • Allow for CMAKE_INSTALL_LIBDIR to be absolute (#10090)
  • Add header search paths to protobuf-c++ spec (#10024)
  • Cpp_generated_lib_linked support is removed in protoc
  • Reduced .pb.o object file size slightly by explicitly instantiating
  • Breaking Change: Add C++20 reserved keywords.
  • Breaking Change: Dropped C++11 Support
  • Fixed crash in ThreadLocalStorage for pre-C++17 compilers on 32-bit ARM.
  • Clarified that JSON API non-OK statuses are not a stable API.
  • Added a default implementation of MessageDifferencer::Reporter methods.
  • Proto2::MapPair is now an alias to std::pair.
  • Hide C++ RepeatedField::UnsafeArenaSwap
  • Use table-driven parser for reflection based objects.
  • Add ARM-optimized Varint decoding functions.
  • Minor optimization for parsing groups
  • Declare ReflectiveProtoHook class
  • Reduce size of VarintParse code in protocol buffers, by calling the shared
  • Avoid inlining some large heavily duplicated routines in repeated_ptr_field.h
  • Add ReflectiveProtoHook to Reflection.
  • Turns on table-driven parser for reflection based objects.
  • Save code space by avoiding inlining of large-in-aggregate code-space MessageLite::~MessageLite destructor.
  • Undefine the macro linux when compiling protobuf
  • Reduce memory consumption of MessageSet parsing.
  • Save code space by avoiding inlining of large-in-aggregate code-space MessageLite::~MessageLite destructor.
  • Breaking Change: Delete Arena::Init
  • Make a PROTOBUF_POISON/UNPOISON to reduce noise in the source
  • Put alignment functions in "arena_align.h"
  • Split off cleanup arena functions into "arena_cleanup.h"
  • Fix signed / unsigned match in CHECK_EQ
  • Kill Atomic<>. it's not pulling it's weight
  • Move AllocationPolicy out of arena_impl, and unify arena_config for bazel
  • Fix failure case in table-driven parser.
  • Breaking Change: Replace JSON parser with new implementation
  • Introduce the Printer::{SetRedactDebugString,SetRandomizeDebugString} private flags.
  • Introduce global flags to control Printer::{SetRedactDebugString, SetRandomizeDebugString}.
  • Proto3 string fields no longer trigger clang-tidy warning bugprone-branch-clone.
  • Fix the API of DescriptorUpgrader::set_allow_unknown_dependencies to set to True always, and to populate into the DescriptorPool as well.
  • Report line numbers consistently in text-format deprecated-field warnings.
  • Fixed C++ code generation for protos that use int32_t, uint32_t, int64_t, uint64_t, size_t as field names.
  • Annotate generated C++ public aliases for enum types.
  • Change default arena max block size from 8K to 32K.
  • Begin emitting semantic metadata for some C++ proto features. (2880fef)

Java

  • Document known quirks of EnumDescriptor::is_closed() when importing across files with different syntaxes. (a594141)
  • Use LazyStringArrayList directly in gencode. (e6dd59e)
  • Add Java support for retention attribute (1325913)
  • Expect fail when serialize inf and nan for Value.number_value in json format. fixes #11259 (ca1cb1b)
  • Create a helper function that can make a mutable copy of any ProtobufList (5669606)
  • Add debug_redact field option to protobuf. (9238c48)
  • Remove unused package private class ProtobufLists. (b51c551)
  • Mark UnmodifiableLazyStringList deprecated. UnmodifiableLazyStringList is unnecessary and will be removed in a future release. (9595cbb)
  • Make emptyList public and mark the public EMPTY field as deprecated. (c658e27)
  • Enable Text format parser to skip unknown short-formed repeated fields. (6dbd413)
  • Expose internal setExtension method for Kotlin (33d1070)
  • Mark default instance as immutable first to avoid race during static initialization of default instances. (#10770)
  • Add serialVersionUID to ByteString and subclasses (#10718)
  • Fix serialization warnings in generated code when compiling with Java 18 and above (#10561)
  • Fix Timestamps fromDate for negative 'exact second' java.sql.Timestamps (#10321)
  • Fix Timestamps.fromDate to correctly handle java.sql.Timestamps before unix epoch (#10126)
  • Performance improvement for repeated use of FieldMaskUtil#merge by caching
  • Optimized Java proto serialization gencode for protos having many extension ranges with few fields in between.
  • More thoroughly annotate public generated code in Java lite protocol buffers.
  • Fixed Bug in proto3 java lite repeated enum fields. Failed to call copyOnWrite before modifying previously built message. Causes modification to already "built" messages that should be immutable.
  • Fix Java reflection serialization of empty packed fields.
  • Refactoring java full runtime to reuse sub-message builders and prepare to migrate parsing logic from parse constructor to builder.
  • Move proto wireformat parsing functionality from the private "parsing constructor" to the Builder class.
  • Change the Lite runtime to prefer merging from the wireformat into mutable messages rather than building up a new immutable object before merging. This way results in fewer allocations and copy operations.
  • Make message-type extensions merge from wire-format instead of building up instances and merging afterwards. This has much better performance.
  • Fix TextFormat parser to build up recurring (but supposedly not repeated) sub-messages directly from text rather than building a new sub-message and merging the fully formed message into the existing field.
  • Fix bug in nested builder caching logic where cleared sub-field builders would remain dirty after a clear and build in a parent layer. #10624
  • Add exemplar variants of the Java Any.is() and Any.unpack() methods. (60b7149...
Read more

Protocol Buffers v22.0-rc3

10 Feb 20:17
Compare
Choose a tag to compare
Pre-release

Announcements

  • Protobuf News may include additional announcements or pre-announcements for upcoming changes.

C++

  • Add C++ support for retention attribute (8f882e7)

Java

  • Use LazyStringArrayList directly in gencode. (e6dd59e)
  • Add Java support for retention attribute (1325913)

Objective-C

  • [ObjC] Mark classes that shouldn't be subclassed as such. (a185a6e)

Ruby

  • For Ruby oneof fields, generate hazzers for members (#11655) (d1a3c6d)

Ruby C-Extension

  • For Ruby oneof fields, generate hazzers for members (#11655) (d1a3c6d)
  • See also UPB changes below, which may affect Ruby C-Extension.

UPB (Python/PHP/Ruby C-Extension)

Other

  • Remove unused headers, include missing headers, match args, etc. (21a6a26)
  • Add a non-const overload of RepeatedPtrField::GetArena and deprecate the const overload. (4bf33da)
  • Optimize Varint Parsing for 32 and 64 bits (ac76ae9)
  • Fix reflection based parser for map entries with closed enum values. (55d2123)

Protocol Buffers v22.0-rc2

02 Feb 21:18
Compare
Choose a tag to compare
Pre-release

Announcements

  • This rc release mainly includes release process fixes since previous -rc1.
  • Protobuf News may include additional announcements or pre-announcements for upcoming changes.

Ruby

  • Downgrade ruby major version (8ce6ad2)

Protocol Buffers v22.0-rc1 (Incomplete)

31 Jan 18:24
Compare
Choose a tag to compare
Pre-release

Announcements

  • This RC was only published for Java, Protoc, and Cocoapods.
  • This version includes breaking changes to: Cpp, Ruby.
    • [Cpp] Migrate to Abseil's logging library. (a9f1ea6)
    • [Cpp] proto2::Map::value_type changes to std::pair<const K, V>. (46656ed)
    • [Cpp] Mark final ZeroCopyInputStream, ZeroCopyOutputStream, and DefaultFieldComparator classes. (bf9c22e)
    • [Cpp] Add a dependency on Abseil (#10416)
    • [Cpp] Remove all autotools usage (#10132)
    • [Cpp] Add C++20 reserved keywords
    • [Cpp] Delete Arena::Init
    • [Cpp] Replace JSON parser with new implementation
    • [Cpp] Make RepeatedField::GetArena non-const in order to support split RepeatedFields.
    • [Ruby] Switch to releasing ruby source gems only.
  • Protobuf News may include additional announcements or pre-announcements for upcoming changes.

Compiler

  • Breaking change: Migrate to Abseil's logging library. (a9f1ea6)
  • Add debug_redact field option to protobuf. (9238c48)
  • Protoc: accept capital X to indicate hex escape in string literals (#10757)
  • Gracefully handle weird placement of linebreaks around comments (#10660)
  • Open up visibility for some compiler internals (#10608)
  • Protoc: validate reserved names are identifiers (#10586)
  • Protoc: validate custom json_name configuration (#10581)
  • Protoc: fix consistency with parsing very large decimal numbers (#10555)
  • Use protoc version for --version (#10386)
  • Fix for grpc.tools #17995 & protobuf #7474 (handle UTF-8 paths in argumentfile) (#10200)
  • Print full path name of source .proto file on error
  • Include proto message type in the annotation comments.
  • Maven artifact suffix format has changed to -RCN instead of -rc-N

C++

  • Breaking change: Migrate to Abseil's logging library. (a9f1ea6)
  • No longer define no_threadlocal on OpenBSD (#10610)
  • CMake: Enable projects to set the C++ version (#10464)
  • Breaking Change: Add a dependency on Abseil (#10416)
  • Upgrade third_party/googletest submodule to current main branch (#10393)
  • Breaking Change: Remove all autotools usage (#10132)
  • CMake: use add_compile_options instead of add_definitions for compile options (#10293)
  • Fix #9947: make the ABI identical between debug and non-debug builds (#10271)
  • Allow for CMAKE_INSTALL_LIBDIR to be absolute (#10090)
  • Add header search paths to protobuf-c++ spec (#10024)
  • Cpp_generated_lib_linked support is removed in protoc
  • Reduced .pb.o object file size slightly by explicitly instantiating
  • Breaking Change: Add C++20 reserved keywords.
  • Fixed crash in ThreadLocalStorage for pre-C++17 compilers on 32-bit ARM.
  • Clarified that JSON API non-OK statuses are not a stable API.
  • Added a default implementation of MessageDifferencer::Reporter methods.
  • Proto2::MapPair is now an alias to std::pair.
  • Hide C++ RepeatedField::UnsafeArenaSwap
  • Use table-driven parser for reflection based objects.
  • Add ARM-optimized Varint decoding functions.
  • Minor optimization for parsing groups
  • Declare ReflectiveProtoHook class
  • Reduce size of VarintParse code in protocol buffers, by calling the shared
  • Avoid inlining some large heavily duplicated routines in repeated_ptr_field.h
  • Add ReflectiveProtoHook to Reflection.
  • Turns on table-driven parser for reflection based objects.
  • Save code space by avoiding inlining of large-in-aggregate code-space MessageLite::~MessageLite destructor.
  • Undefine the macro linux when compiling protobuf
  • Reduce memory consumption of MessageSet parsing.
  • Save code space by avoiding inlining of large-in-aggregate code-space MessageLite::~MessageLite destructor.
  • Breaking Change: Delete Arena::Init
  • Make a PROTOBUF_POISON/UNPOISON to reduce noise in the source
  • Put alignment functions in "arena_align.h"
  • Split off cleanup arena functions into "arena_cleanup.h"
  • Fix signed / unsigned match in CHECK_EQ
  • Kill Atomic<>. it's not pulling it's weight
  • Move AllocationPolicy out of arena_impl, and unify arena_config for bazel
  • Fix failure case in table-driven parser.
  • Breaking Change: Replace JSON parser with new implementation
  • Introduce the Printer::{SetRedactDebugString,SetRandomizeDebugString} private flags.
  • Introduce global flags to control Printer::{SetRedactDebugString, SetRandomizeDebugString}.
  • Proto3 string fields no longer trigger clang-tidy warning bugprone-branch-clone.
  • Fix the API of DescriptorUpgrader::set_allow_unknown_dependencies to set to True always, and to populate into the DescriptorPool as well.
  • Report line numbers consistently in text-format deprecated-field warnings.
  • Fixed C++ code generation for protos that use int32_t, uint32_t, int64_t, uint64_t, size_t as field names.
  • Annotate generated C++ public aliases for enum types.
  • Change default arena max block size from 8K to 32K.
  • Begin emitting semantic metadata for some C++ proto features. (2880fef)

Java

  • Expect fail when serialize inf and nan for Value.number_value in json format. fixes #11259 (ca1cb1b)
  • Create a helper function that can make a mutable copy of any ProtobufList (5669606)
  • Add debug_redact field option to protobuf. (9238c48)
  • Remove unused package private class ProtobufLists. (b51c551)
  • Mark UnmodifiableLazyStringList deprecated. UnmodifiableLazyStringList is unnecessary and will be removed in a future release. (9595cbb)
  • Make emptyList public and mark the public EMPTY field as deprecated. (c658e27)
  • Enable Text format parser to skip unknown short-formed repeated fields. (6dbd413)
  • Expose internal setExtension method for Kotlin (33d1070)
  • Mark default instance as immutable first to avoid race during static initialization of default instances. (#10770)
  • Add serialVersionUID to ByteString and subclasses (#10718)
  • Fix serialization warnings in generated code when compiling with Java 18 and above (#10561)
  • Fix Timestamps fromDate for negative 'exact second' java.sql.Timestamps (#10321)
  • Fix Timestamps.fromDate to correctly handle java.sql.Timestamps before unix epoch (#10126)
  • Performance improvement for repeated use of FieldMaskUtil#merge by caching
  • Optimized Java proto serialization gencode for protos having many extension ranges with few fields in between.
  • More thoroughly annotate public generated code in Java lite protocol buffers.
  • Fixed Bug in proto3 java lite repeated enum fields. Failed to call copyOnWrite before modifying previously built message. Causes modification to already "built" messages that should be immutable.
  • Fix Java reflection serialization of empty packed fields.
  • Refactoring java full runtime to reuse sub-message builders and prepare to migrate parsing logic from parse constructor to builder.
  • Move proto wireformat parsing functionality from the private "parsing constructor" to the Builder class.
  • Change the Lite runtime to prefer merging from the wireformat into mutable messages rather than building up a new immutable object before merging. This way results in fewer allocations and copy operations.
  • Make message-type extensions merge from wire-format instead of building up instances and merging afterwards. This has much better performance.
  • Fix TextFormat parser to build up recurring (but supposedly not repeated) sub-messages directly from text rather than building a new sub-message and merging the fully formed message into the existing field.
  • Fix bug in nested builder caching logic where cleared sub-field builders would remain dirty after a clear and build in a parent layer. #10624
  • Add exemplar variants of the Java Any.is() and Any.unpack() methods. (60b7149)
  • Use bit-field int values in buildPartial to skip work on unset groups of fields. (2326aef)
  • Maven artifact suffix format has changed to -RCN instead of -rc-N

Kotlin

  • Add debug_redact field option to protobuf. (9238c48)
  • Expose internal setExtension method for Kotlin (33d1070)
  • Add missing public modifier to Kotlin generated code (#10616)
  • Add "public" modifier to Kotlin generated code (#10599)
  • Update rules_kotlin version (#10212)
  • Suppress deprecation warnings in Kotlin generated code.
  • Kotlin generated code comments now use kdoc format instead of javadoc.
  • Escape keywords in package names in proto generated code
  • Add Kotlin enum int value getters and se...
Read more

Protocol Buffers v21.12

14 Dec 14:45
Compare
Choose a tag to compare

Python

  • Fix broken enum ranges (#11171)
  • Stop requiring extension fields to have a sythetic oneof (#11091)
  • Python runtime 4.21.10 not works generated code can not load valid proto.
    (#11171)

Protocol Buffers v21.11

08 Dec 06:34
Compare
Choose a tag to compare

Python

  • Add license file to pypi wheels (#10936)
  • Fix round-trip bug (#10158)