diff --git a/src/changes/changes.xml b/src/changes/changes.xml index f43f032911..3763d0b8c2 100644 --- a/src/changes/changes.xml +++ b/src/changes/changes.xml @@ -45,6 +45,7 @@ The type attribute can be add,update,fix,remove. + Base32.Builder.setHexDecodeTable(boolean) sets the encode table to a decode lookup table. Base16.Builder.setEncodeTable(byte...) can create a codec that cannot decode its own output. URLCodec.encodeUrl(BitSet, byte[]) allows custom safe sets to emit URL encoding control characters. PercentCodec loses literal '+' when plusForSpace is enabled. diff --git a/src/main/java/org/apache/commons/codec/binary/Base32.java b/src/main/java/org/apache/commons/codec/binary/Base32.java index 1de642387e..a1206c6732 100644 --- a/src/main/java/org/apache/commons/codec/binary/Base32.java +++ b/src/main/java/org/apache/commons/codec/binary/Base32.java @@ -103,7 +103,7 @@ public Builder setEncodeTable(final byte... encodeTable) { } /** - * Sets the decode table to use Base32 hexadecimal if {@code true}, otherwise use the Base32 alphabet. + * Sets the encode and decode tables to use Base32 hexadecimal if {@code true}, otherwise use the Base32 alphabet. *

* This overrides a value previously set with {@link #setEncodeTable(byte...)}. *

@@ -113,7 +113,7 @@ public Builder setEncodeTable(final byte... encodeTable) { * @since 1.18.0 */ public Builder setHexDecodeTable(final boolean useHex) { - return setEncodeTable(decodeTable(useHex)); + return setEncodeTable(encodeTable(useHex)); } /** diff --git a/src/test/java/org/apache/commons/codec/binary/Base32Test.java b/src/test/java/org/apache/commons/codec/binary/Base32Test.java index c332c448d0..ed3e0b9c46 100644 --- a/src/test/java/org/apache/commons/codec/binary/Base32Test.java +++ b/src/test/java/org/apache/commons/codec/binary/Base32Test.java @@ -319,6 +319,15 @@ void testBase32HexImpossibleSamples() { // @formatter:on } + @Test + void testBuilderSetHexDecodeTableDecodesOwnOutput() { + final Base32 base32 = Base32.builder().setHexDecodeTable(true).setLineLength(0).get(); + final byte[] data = { 0 }; + final byte[] encoded = base32.encode(data); + assertEquals("00======", new String(encoded, StandardCharsets.US_ASCII)); + assertArrayEquals(data, base32.decode(encoded)); + } + @Test void testBase32HexSamples() throws Exception { final Base32 codec = new Base32(true);