From ef765ceb2744e845fbddbb0569987e8ea9b06aed Mon Sep 17 00:00:00 2001 From: Protobuf Team Bot Date: Thu, 20 Aug 2026 12:43:20 -0700 Subject: [PATCH] Enable aliasing when parsing lazy fields. PiperOrigin-RevId: 967992657 --- .../java/com/google/protobuf/InternalLazyField.java | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/java/core/src/main/java/com/google/protobuf/InternalLazyField.java b/java/core/src/main/java/com/google/protobuf/InternalLazyField.java index 81b106ace8..a5e486784a 100644 --- a/java/core/src/main/java/com/google/protobuf/InternalLazyField.java +++ b/java/core/src/main/java/com/google/protobuf/InternalLazyField.java @@ -210,14 +210,17 @@ class InternalLazyField { } try { // `bytes` is guaranteed to be non-null since `value` was null. + CodedInputStream input = bytes.newCodedInput(); + input.enableAliasing(/* enabled= */ true); // When lazyExtensionEnabled() returns true, it means all extensions including MessageSet's - // will be fully parsed. When it returns false, it basically implies this is a message set - // extension, and we should fall back to the old behavior of silently returning the default - // instance on corrupted extensions i.e. full parse. + // will be fully parsed. When it returns false, it basically implies this can only be a + // MessageSet extension, and we should fall back to the old behavior of silently returning + // the default instance on corrupted extensions i.e. a full parse. value = ExtensionRegistryLite.lazyExtensionEnabled() - ? defaultInstance.getParserForType().parsePartialFrom(bytes, extensionRegistry) - : defaultInstance.getParserForType().parseFrom(bytes, extensionRegistry); + ? defaultInstance.getParserForType().parsePartialFrom(input, extensionRegistry) + : defaultInstance.getParserForType().parseFrom(input, extensionRegistry); + input.checkLastTagWas(0); } catch (InvalidProtocolBufferException e) { corrupted = true; throw e;