From 74e4ad093850506ce204c4b787c73804c03d352f Mon Sep 17 00:00:00 2001 From: Jonathan Halliday Date: Mon, 13 Apr 2026 13:16:03 +0100 Subject: [PATCH 1/2] Fix MarshalerUtil sizeRepeatedString calculation per issue#8272 --- .../opentelemetry/exporter/internal/marshal/MarshalerUtil.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/exporters/common/src/main/java/io/opentelemetry/exporter/internal/marshal/MarshalerUtil.java b/exporters/common/src/main/java/io/opentelemetry/exporter/internal/marshal/MarshalerUtil.java index 4b714086f9b..b4cfaf6bb5b 100644 --- a/exporters/common/src/main/java/io/opentelemetry/exporter/internal/marshal/MarshalerUtil.java +++ b/exporters/common/src/main/java/io/opentelemetry/exporter/internal/marshal/MarshalerUtil.java @@ -115,7 +115,8 @@ private static int sizeRepeatedFixed64(ProtoFieldInfo field, int numValues) { public static int sizeRepeatedString(ProtoFieldInfo field, byte[][] utf8Bytes) { int size = 0; for (byte[] i : utf8Bytes) { - size += MarshalerUtil.sizeBytes(field, i); + int s = field.getTagSize() + CodedOutputStream.computeByteArraySizeNoTag(i); + size += s; } return size; } From 487c0cc1d5117e275d08299f7fd1e301c0f85a38 Mon Sep 17 00:00:00 2001 From: Jonathan Halliday Date: Thu, 16 Apr 2026 09:53:23 +0100 Subject: [PATCH 2/2] Fix MarshalerUtil sizeRepeatedString calculation per issue#8272 --- .../exporter/internal/marshal/MarshalerUtil.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/exporters/common/src/main/java/io/opentelemetry/exporter/internal/marshal/MarshalerUtil.java b/exporters/common/src/main/java/io/opentelemetry/exporter/internal/marshal/MarshalerUtil.java index b4cfaf6bb5b..494853723dc 100644 --- a/exporters/common/src/main/java/io/opentelemetry/exporter/internal/marshal/MarshalerUtil.java +++ b/exporters/common/src/main/java/io/opentelemetry/exporter/internal/marshal/MarshalerUtil.java @@ -115,8 +115,7 @@ private static int sizeRepeatedFixed64(ProtoFieldInfo field, int numValues) { public static int sizeRepeatedString(ProtoFieldInfo field, byte[][] utf8Bytes) { int size = 0; for (byte[] i : utf8Bytes) { - int s = field.getTagSize() + CodedOutputStream.computeByteArraySizeNoTag(i); - size += s; + size += sizeBytes(field, i, /* skipEmpty= */ false); } return size; } @@ -385,7 +384,12 @@ public static int sizeFixed32(ProtoFieldInfo field, int message) { /** Returns the size of a bytes field. */ public static int sizeBytes(ProtoFieldInfo field, byte[] message) { - if (message.length == 0) { + return sizeBytes(field, message, /* skipEmpty= */ true); + } + + /** Returns the size of a bytes field. */ + public static int sizeBytes(ProtoFieldInfo field, byte[] message, boolean skipEmpty) { + if (message.length == 0 && skipEmpty) { return 0; } return field.getTagSize() + CodedOutputStream.computeByteArraySizeNoTag(message);