From 539281109cf16bc6afe6b53d46a7320f776e6ebd Mon Sep 17 00:00:00 2001 From: fancy Date: Fri, 27 Feb 2026 18:12:52 +0800 Subject: [PATCH 1/2] Add BinaryCodec boundary tests for short and partial bit strings --- .../commons/codec/binary/BinaryCodecTest.java | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/src/test/java/org/apache/commons/codec/binary/BinaryCodecTest.java b/src/test/java/org/apache/commons/codec/binary/BinaryCodecTest.java index 374ee406ed..14ccaae042 100644 --- a/src/test/java/org/apache/commons/codec/binary/BinaryCodecTest.java +++ b/src/test/java/org/apache/commons/codec/binary/BinaryCodecTest.java @@ -17,6 +17,7 @@ package org.apache.commons.codec.binary; +import static org.junit.jupiter.api.Assertions.assertArrayEquals; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.fail; @@ -1158,4 +1159,31 @@ void testToByteArrayFromString() { assertEquals(new String(bits), new String(decoded)); assertEquals(0, instance.toByteArray((String) null).length); } + + @Test + void testFromAsciiByteArrayLengthLessThan8ReturnsEmpty() { + assertArrayEquals(new byte[0], BinaryCodec.fromAscii("1".getBytes(CHARSET_UTF8))); + } + + @Test + void testFromAsciiCharArrayLengthLessThan8ReturnsEmpty() { + assertArrayEquals(new byte[0], BinaryCodec.fromAscii("1".toCharArray())); + } + + @Test + void testFromAsciiByteArrayLengthNotMultipleOf8IgnoresLeadingBits() { + assertArrayEquals(new byte[] { 0 }, BinaryCodec.fromAscii("100000000".getBytes(CHARSET_UTF8))); + assertArrayEquals(new byte[] { (byte) 0x80 }, BinaryCodec.fromAscii("010000000".getBytes(CHARSET_UTF8))); + } + + @Test + void testFromAsciiCharArrayLengthNotMultipleOf8IgnoresLeadingBits() { + assertArrayEquals(new byte[] { 0 }, BinaryCodec.fromAscii("100000000".toCharArray())); + assertArrayEquals(new byte[] { (byte) 0x80 }, BinaryCodec.fromAscii("010000000".toCharArray())); + } + + @Test + void testToAsciiStringNullReturnsEmptyString() { + assertEquals("", BinaryCodec.toAsciiString(null)); + } } From 3da6d7a78991bdd6bff01723c8ec20eddcb5699b Mon Sep 17 00:00:00 2001 From: fancy Date: Fri, 27 Feb 2026 22:10:37 +0800 Subject: [PATCH 2/2] Fold BinaryCodec boundary checks into existing tests --- .../commons/codec/binary/BinaryCodecTest.java | 33 ++++--------------- 1 file changed, 7 insertions(+), 26 deletions(-) diff --git a/src/test/java/org/apache/commons/codec/binary/BinaryCodecTest.java b/src/test/java/org/apache/commons/codec/binary/BinaryCodecTest.java index 14ccaae042..552b87e611 100644 --- a/src/test/java/org/apache/commons/codec/binary/BinaryCodecTest.java +++ b/src/test/java/org/apache/commons/codec/binary/BinaryCodecTest.java @@ -540,6 +540,9 @@ void testEncodeObjectNull() throws Exception { void testFromAsciiByteArray() { assertEquals(0, BinaryCodec.fromAscii((byte[]) null).length); assertEquals(0, BinaryCodec.fromAscii(new byte[0]).length); + assertArrayEquals(new byte[0], BinaryCodec.fromAscii("1".getBytes(CHARSET_UTF8))); + assertArrayEquals(new byte[] { 0 }, BinaryCodec.fromAscii("100000000".getBytes(CHARSET_UTF8))); + assertArrayEquals(new byte[] { (byte) 0x80 }, BinaryCodec.fromAscii("010000000".getBytes(CHARSET_UTF8))); // With a single raw binary byte[] bits = new byte[1]; byte[] decoded = BinaryCodec.fromAscii("00000000".getBytes(CHARSET_UTF8)); @@ -631,6 +634,9 @@ void testFromAsciiByteArray() { void testFromAsciiCharArray() { assertEquals(0, BinaryCodec.fromAscii((char[]) null).length); assertEquals(0, BinaryCodec.fromAscii(new char[0]).length); + assertArrayEquals(new byte[0], BinaryCodec.fromAscii("1".toCharArray())); + assertArrayEquals(new byte[] { 0 }, BinaryCodec.fromAscii("100000000".toCharArray())); + assertArrayEquals(new byte[] { (byte) 0x80 }, BinaryCodec.fromAscii("010000000".toCharArray())); // With a single raw binary byte[] bits = new byte[1]; byte[] decoded = BinaryCodec.fromAscii("00000000".toCharArray()); @@ -1069,6 +1075,7 @@ void testToAsciiString() { bits[1] = (byte) (BIT_0 | BIT_1 | BIT_2 | BIT_3 | BIT_4 | BIT_5 | BIT_6 | BIT_7); encoded = BinaryCodec.toAsciiString(bits); assertEquals("1111111111111111", encoded); + assertEquals("", BinaryCodec.toAsciiString(null)); } /** @@ -1160,30 +1167,4 @@ void testToByteArrayFromString() { assertEquals(0, instance.toByteArray((String) null).length); } - @Test - void testFromAsciiByteArrayLengthLessThan8ReturnsEmpty() { - assertArrayEquals(new byte[0], BinaryCodec.fromAscii("1".getBytes(CHARSET_UTF8))); - } - - @Test - void testFromAsciiCharArrayLengthLessThan8ReturnsEmpty() { - assertArrayEquals(new byte[0], BinaryCodec.fromAscii("1".toCharArray())); - } - - @Test - void testFromAsciiByteArrayLengthNotMultipleOf8IgnoresLeadingBits() { - assertArrayEquals(new byte[] { 0 }, BinaryCodec.fromAscii("100000000".getBytes(CHARSET_UTF8))); - assertArrayEquals(new byte[] { (byte) 0x80 }, BinaryCodec.fromAscii("010000000".getBytes(CHARSET_UTF8))); - } - - @Test - void testFromAsciiCharArrayLengthNotMultipleOf8IgnoresLeadingBits() { - assertArrayEquals(new byte[] { 0 }, BinaryCodec.fromAscii("100000000".toCharArray())); - assertArrayEquals(new byte[] { (byte) 0x80 }, BinaryCodec.fromAscii("010000000".toCharArray())); - } - - @Test - void testToAsciiStringNullReturnsEmptyString() { - assertEquals("", BinaryCodec.toAsciiString(null)); - } }