From 173adca21659bfd06ae23f07d48129e7633d1f2e Mon Sep 17 00:00:00 2001 From: Protobuf Team Bot Date: Thu, 22 Jun 2023 09:18:12 -0700 Subject: [PATCH] Put a 4k limit on preallocation to prevent OOM from malformed inputs. PiperOrigin-RevId: 542579832 --- src/google/protobuf/compiler/java/primitive_field.cc | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/google/protobuf/compiler/java/primitive_field.cc b/src/google/protobuf/compiler/java/primitive_field.cc index 35f0571647b19..23c09f20df5f1 100644 --- a/src/google/protobuf/compiler/java/primitive_field.cc +++ b/src/google/protobuf/compiler/java/primitive_field.cc @@ -971,10 +971,12 @@ void RepeatedImmutablePrimitiveFieldGenerator::GenerateBuilderParsingCode( void RepeatedImmutablePrimitiveFieldGenerator:: GenerateBuilderParsingCodeFromPacked(io::Printer* printer) const { if (FixedSize(GetType(descriptor_)) != -1) { + // 4K limit on pre-allocations to prevent OOM from malformed input. printer->Print(variables_, "int length = input.readRawVarint32();\n" "int limit = input.pushLimit(length);\n" - "ensure$capitalized_name$IsMutable(length / $fixed_size$);\n" + "int alloc = length > 4096 ? 4096 : length;\n" + "ensure$capitalized_name$IsMutable(alloc / $fixed_size$);\n" "while (input.getBytesUntilLimit() > 0) {\n" " $repeated_add$(input.read$capitalized_type$());\n" "}\n"