This is an automated email from the ASF dual-hosted git repository.
ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-codec.git
The following commit(s) were added to refs/heads/master by this push:
new 9fb8ee2a Add Base32.Builder.setHexDecodeTable(boolean)
9fb8ee2a is described below
commit 9fb8ee2a07031b16c8cde31edaaea58bfd5d3739
Author: Gary D. Gregory <[email protected]>
AuthorDate: Tue Jan 21 07:04:30 2025 -0500
Add Base32.Builder.setHexDecodeTable(boolean)
- Add Base32.Builder.setHexEncodeTable(boolean)
- New public API means the next version will be 1.18.0
---
pom.xml | 6 +--
src/changes/changes.xml | 4 +-
.../org/apache/commons/codec/binary/Base32.java | 45 +++++++++++++++++++---
.../apache/commons/codec/binary/Base32Test.java | 16 ++++++++
4 files changed, 62 insertions(+), 9 deletions(-)
diff --git a/pom.xml b/pom.xml
index e58d9780..21557670 100644
--- a/pom.xml
+++ b/pom.xml
@@ -28,7 +28,7 @@ limitations under the License.
</parent>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
- <version>1.17.3-SNAPSHOT</version>
+ <version>1.18.0-SNAPSHOT</version>
<name>Apache Commons Codec</name>
<inceptionYear>2002</inceptionYear>
<description>
@@ -93,9 +93,9 @@ limitations under the License.
<checkstyle.header.file>${basedir}/src/conf/checkstyle-header.txt</checkstyle.header.file>
<checkstyle.config.file>${basedir}/src/conf/checkstyle.xml</checkstyle.config.file>
<!-- Commons Release Plugin -->
- <commons.release.version>1.17.2</commons.release.version>
+ <commons.release.version>1.18.0</commons.release.version>
<commons.bc.version>1.17.1</commons.bc.version>
- <commons.release.next>1.17.3</commons.release.next>
+ <commons.release.next>1.18.1</commons.release.next>
<commons.rc.version>RC1</commons.rc.version>
<commons.release.isDistModule>true</commons.release.isDistModule>
<commons.distSvnStagingUrl>scm:svn:https://dist.apache.org/repos/dist/dev/commons/${commons.componentid}</commons.distSvnStagingUrl>
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 993d84a8..f553b970 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -43,9 +43,11 @@ The <action> type attribute can be add,update,fix,remove.
<author>Apache Commons Developers</author>
</properties>
<body>
- <release version="1.17.3" date="YYYY-MM-DD" description="This is a feature
and maintenance release. Java 8 or later is required.">
+ <release version="1.18.0" date="YYYY-MM-DD" description="This is a feature
and maintenance release. Java 8 or later is required.">
<!-- FIX -->
<!-- ADD -->
+ <action type="add" dev="ggregory" due-to="Gary Gregory, Julian
Reschke">Add Base32.Builder.setHexDecodeTable(boolean).</action>
+ <action type="add" dev="ggregory" due-to="Gary Gregory, Julian
Reschke">Add Base32.Builder.setHexEncodeTable(boolean).</action>
<!-- UPDATE -->
<action type="update" dev="ggregory" due-to="Gary Gregory">Bump
org.apache.commons:commons-parent from 78 to 79.</action>
</release>
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 9f88c2a3..81951aca 100644
--- a/src/main/java/org/apache/commons/codec/binary/Base32.java
+++ b/src/main/java/org/apache/commons/codec/binary/Base32.java
@@ -75,6 +75,33 @@ public class Base32 extends BaseNCodec {
return new Base32(getLineLength(), getLineSeparator(),
getEncodeTable(), getPadding(), getDecodingPolicy());
}
+ /**
+ * Sets the decode table to use Base32 hexadecimal if {@code true},
otherwise use the Base32 alphabet.
+ * <p>
+ * This overrides a value previously set with {@link
#setEncodeTable(byte...)}.
+ * </p>
+ *
+ * @param useHex use Base32 hexadecimal if {@code true}, otherwise use
the Base32 alphabet.
+ * @return this instance.
+ * @since 1.18.0
+ */
+ public Builder setHexDecodeTable(final boolean useHex) {
+ return setEncodeTable(decodeTable(useHex));
+ }
+
+ /**
+ * Sets the encode table to use Base32 hexadecimal if {@code true},
otherwise use the Base32 alphabet.
+ * <p>
+ * This overrides a value previously set with {@link
#setEncodeTable(byte...)}.
+ * </p>
+ *
+ * @param useHex use Base32 hexadecimal if {@code true}, otherwise use
the Base32 alphabet.
+ * @return this instance.
+ * @since 1.18.0
+ */
+ public Builder setHexEncodeTable(final boolean useHex) {
+ return setEncodeTable(encodeTable(useHex));
+ }
}
/**
@@ -162,6 +189,10 @@ public class Base32 extends BaseNCodec {
/** Mask used to extract 1 bits, used when decoding final trailing
character. */
private static final long MASK_1BITS = 0x01L;
+ // The static final fields above are used for the original static byte[]
methods on Base32.
+ // The private member fields below are used with the new streaming
approach, which requires
+ // some state be preserved between calls of encode() and decode().
+
/**
* Creates a new Builder.
*
@@ -172,9 +203,13 @@ public class Base32 extends BaseNCodec {
return new Builder();
}
- // The static final fields above are used for the original static byte[]
methods on Base32.
- // The private member fields below are used with the new streaming
approach, which requires
- // some state be preserved between calls of encode() and decode().
+ private static byte[] decodeTable(final boolean useHex) {
+ return useHex ? HEX_DECODE_TABLE : DECODE_TABLE;
+ }
+
+ private static byte[] encodeTable(final boolean useHex) {
+ return useHex ? HEX_ENCODE_TABLE : ENCODE_TABLE;
+ }
/**
* Decode table to use.
@@ -326,14 +361,14 @@ public class Base32 extends BaseNCodec {
* @param lineLength Each line of encoded data will be at most of the
given length (rounded down to the nearest multiple of 8). If lineLength <= 0,
* then the output will not be divided into lines
(chunks). Ignored when decoding.
* @param lineSeparator Each line of encoded data will end with this
sequence of bytes.
- * @param useHex if {@code true}, then use Base32 Hex alphabet,
otherwise use Base32 alphabet
+ * @param useHex use Base32 hexadecimal if {@code true}, otherwise
use the Base32 alphabet.
* @param padding padding byte.
* @param decodingPolicy The decoding policy.
* @throws IllegalArgumentException Thrown when the {@code lineSeparator}
contains Base32 characters. Or the lineLength > 0 and lineSeparator is null.
* @since 1.15
*/
public Base32(final int lineLength, final byte[] lineSeparator, final
boolean useHex, final byte padding, final CodecPolicy decodingPolicy) {
- this(lineLength, lineSeparator, useHex ? HEX_ENCODE_TABLE :
ENCODE_TABLE, padding, decodingPolicy);
+ this(lineLength, lineSeparator, encodeTable(useHex), padding,
decodingPolicy);
}
/**
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 419b5738..16d6a0b6 100644
--- a/src/test/java/org/apache/commons/codec/binary/Base32Test.java
+++ b/src/test/java/org/apache/commons/codec/binary/Base32Test.java
@@ -292,6 +292,22 @@ public class Base32Test {
@Test
public void testBase32HexImpossibleSamples() {
testImpossibleCases(new Base32(0, null, true, BaseNCodec.PAD_DEFAULT,
CodecPolicy.STRICT), BASE32HEX_IMPOSSIBLE_CASES);
+ // @formatter:off
+ testImpossibleCases(Base32.builder()
+ .setHexEncodeTable(true)
+ .setDecodingPolicy(CodecPolicy.STRICT)
+ .get(), BASE32HEX_IMPOSSIBLE_CASES);
+ // @formatter:on
+ // overrides, last set wins
+ // @formatter:off
+ testImpossibleCases(Base32.builder()
+ .setHexDecodeTable(false)
+ .setHexDecodeTable(true)
+ .setHexEncodeTable(false)
+ .setHexEncodeTable(true)
+ .setDecodingPolicy(CodecPolicy.STRICT)
+ .get(), BASE32HEX_IMPOSSIBLE_CASES);
+ // @formatter:on
}
@Test