This is an automated email from the ASF dual-hosted git repository.
RyanSkraba pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/avro.git
The following commit(s) were added to refs/heads/main by this push:
new f3bb10eaea AVRO-4268: BytesWritableConverter should respect logical
length (#3878)
f3bb10eaea is described below
commit f3bb10eaea1f03eb17893bc779eb26213da8177c
Author: Harsh Srivastava <[email protected]>
AuthorDate: Sun Jul 19 18:39:59 2026 +0530
AVRO-4268: BytesWritableConverter should respect logical length (#3878)
BytesWritable.getBytes() returns the backing array, which can be larger
than the logical length reported by BytesWritable.getLength(). Wrap
input.getBytes() with the actual length so the Avro bytes value reflects
the caller's data, not unused backing-array capacity.
Adds convertBytesWritableRespectsLogicalLength to cover the regression.
Signed-off-by: Harsh Srivastava <[email protected]>
---
.../apache/avro/hadoop/io/AvroDatumConverterFactory.java | 2 +-
.../avro/hadoop/io/TestAvroDatumConverterFactory.java | 15 +++++++++++++++
2 files changed, 16 insertions(+), 1 deletion(-)
diff --git
a/lang/java/mapred/src/main/java/org/apache/avro/hadoop/io/AvroDatumConverterFactory.java
b/lang/java/mapred/src/main/java/org/apache/avro/hadoop/io/AvroDatumConverterFactory.java
index f2e4fcca3d..a9984e08e5 100644
---
a/lang/java/mapred/src/main/java/org/apache/avro/hadoop/io/AvroDatumConverterFactory.java
+++
b/lang/java/mapred/src/main/java/org/apache/avro/hadoop/io/AvroDatumConverterFactory.java
@@ -199,7 +199,7 @@ public class AvroDatumConverterFactory extends Configured {
/** {@inheritDoc} */
@Override
public ByteBuffer convert(BytesWritable input) {
- return ByteBuffer.wrap(input.getBytes());
+ return ByteBuffer.wrap(input.getBytes(), 0, input.getLength());
}
/** {@inheritDoc} */
diff --git
a/lang/java/mapred/src/test/java/org/apache/avro/hadoop/io/TestAvroDatumConverterFactory.java
b/lang/java/mapred/src/test/java/org/apache/avro/hadoop/io/TestAvroDatumConverterFactory.java
index b0d2041c1a..21a1bf361d 100644
---
a/lang/java/mapred/src/test/java/org/apache/avro/hadoop/io/TestAvroDatumConverterFactory.java
+++
b/lang/java/mapred/src/test/java/org/apache/avro/hadoop/io/TestAvroDatumConverterFactory.java
@@ -89,6 +89,21 @@ public class TestAvroDatumConverterFactory {
assertEquals(3, bytes.get(2));
}
+ @Test
+ void convertBytesWritableRespectsLogicalLength() {
+ AvroDatumConverter<BytesWritable, ByteBuffer> converter =
mFactory.create(BytesWritable.class);
+ byte[] backing = new byte[] { 1, 2, 3, 4, 5 };
+ BytesWritable writable = new BytesWritable(backing);
+ writable.setSize(3);
+
+ ByteBuffer bytes = converter.convert(writable);
+
+ assertEquals(3, bytes.remaining());
+ assertEquals(1, bytes.get(0));
+ assertEquals(2, bytes.get(1));
+ assertEquals(3, bytes.get(2));
+ }
+
@Test
void convertByteWritable() {
AvroDatumConverter<ByteWritable, GenericFixed> converter =
mFactory.create(ByteWritable.class);