diff --git a/core/src/main/java/org/apache/iceberg/avro/AvroEncoderUtil.java b/core/src/main/java/org/apache/iceberg/avro/AvroEncoderUtil.java index 0db8d7dd5f9f..97892bf8fcb2 100644 --- a/core/src/main/java/org/apache/iceberg/avro/AvroEncoderUtil.java +++ b/core/src/main/java/org/apache/iceberg/avro/AvroEncoderUtil.java @@ -23,6 +23,7 @@ import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; +import java.util.Locale; import org.apache.avro.LogicalTypes; import org.apache.avro.Schema; import org.apache.avro.io.BinaryDecoder; @@ -73,9 +74,8 @@ public static T decode(byte[] data) throws IOException { byte header1 = dataInput.readByte(); Preconditions.checkState( header0 == MAGIC_BYTES[0] && header1 == MAGIC_BYTES[1], - "Unrecognized header bytes: 0x%02X 0x%02X", - header0, - header1); + "%s", + String.format(Locale.ROOT, "Unrecognized header bytes: 0x%02X 0x%02X", header0, header1)); // Read avro schema Schema avroSchema = new Schema.Parser().parse(dataInput.readUTF()); diff --git a/core/src/test/java/org/apache/iceberg/avro/TestAvroEncoderUtil.java b/core/src/test/java/org/apache/iceberg/avro/TestAvroEncoderUtil.java index 456093501b72..0b853971706c 100644 --- a/core/src/test/java/org/apache/iceberg/avro/TestAvroEncoderUtil.java +++ b/core/src/test/java/org/apache/iceberg/avro/TestAvroEncoderUtil.java @@ -19,6 +19,7 @@ package org.apache.iceberg.avro; import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; import java.io.IOException; import java.util.List; @@ -27,6 +28,7 @@ import org.apache.avro.generic.GenericData; import org.apache.iceberg.data.DataTestBase; import org.apache.iceberg.types.Type; +import org.junit.jupiter.api.Test; public class TestAvroEncoderUtil extends DataTestBase { @Override @@ -68,4 +70,11 @@ protected void writeAndValidate(org.apache.iceberg.Schema schema) throws IOExcep assertThat(record.toString()).isEqualTo(expectedRecord.toString()); } } + + @Test + public void decodeRejectsUnrecognizedHeaderBytes() { + assertThatThrownBy(() -> AvroEncoderUtil.decode(new byte[] {(byte) 0x10, (byte) 0x20})) + .isInstanceOf(IllegalStateException.class) + .hasMessage("Unrecognized header bytes: 0x10 0x20"); + } }