Apache Commons Codec Release Notes
Apache Commons Developers
Test clean ups.
[StepSecurity] ci: Harden GitHub Actions #187.
Correct error in Base64 Javadoc #188.
Add minimum Java version in changes.xml #186.
Documentation update for the org.apache.commons.codec.digest.* package #208.
Precompile regular expression in UnixCrypt.crypt(byte[], String).
Bump commons-parent from 58 to 64.
Bump commons-lang3 from 3.12.0 to 3.13.0.
Bump commons-io from 2.13.0 to 2.15.0.
Minor improvements #67.
Remove duplicated words from Javadocs.
Simplify assertion #84.
Simplify assertion #84.
Use Standard Charset object #82.
Use String.contains() functions #125.
Avoid use toString() or substring() in favor of a simplified expression #126.
Fix byte-skipping in Base16 decoding #135.
Fix several typos, improve writing in some javadocs #139.
BaseNCodecOutputStream.eof() should not throw IOException.
Javadoc improvements and cleanups.
Deprecate BaseNCodec.isWhiteSpace(byte) and use Character.isWhitespace(int).
Add support for Blake3 family of hashes.
Add github/codeql-action.
Bump actions/cache from v2 to v3.0.10 #75, #99, #119, #138, #149, #152.
Bump actions/setup-java from v1.4.1 to 3.5.1 #60, #62, #121.
Bump actions/checkout from 2.3.2 to 3.1.0 #65, #98, #114, #153.
Bump commons-parent from 52 to 58, #147, #165, #170.
Bump junit from 4.13.1 to 5.9.1 #76, #39, #140, #148.
Bump Java 7 to 8.
Bump japicmp-maven-plugin from 0.14.3 to 0.17.1.
Bump jacoco-maven-plugin from 0.8.5 to 0.8.8 (Fixes Java 15 builds).
Bump maven-surefire-plugin from 2.22.2 to 3.0.0-M7 #122, #134.
Bump maven-javadoc-plugin from 3.2.0 to 3.4.1.
Bump animal-sniffer-maven-plugin from 1.19 to 1.22.
Bump maven-pmd-plugin from 3.13.0 to 3.19.0, #133, #142, #145.
Bump pmd from 6.47.0 to 6.52.0.
Bump maven-checkstyle-plugin from 2.17 to 3.2.0 #143.
Bump checkstyle from 8.45.1 to 9.3 #97, #100, #101, #103.
Bump taglist-maven-plugin from 2.4 to 3.0.0 #102.
Bump jacoco-maven-plugin from 0.8.7 to 0.8.8.
MurmurHash3: Ensure hash128 maintains the sign extension bug.
Base32/Base64/BCodec: Added strict decoding property to control handling of trailing bits. Default lenient mode discards them without error. Strict mode raise an exception.
Base32/Base64 Input/OutputStream: Added strict decoding property to control handling of trailing bits. Default lenient mode discards them without error. Strict mode raise an exception.
Update tests from JUnit 4.12 to 4.13.
Base16Codec and Base16Input/OutputStream.
Hex encode/decode with existing arrays.
Update actions/checkout from v1 to v2.3.2 #50, #56.
Update actions/setup-java from v1.4.0 to v1.4.1 #57.
Hex: Allow encoding read-only ByteBuffer.
Hex: Only use an available ByteBuffer backing array if the length equals the remaining byte count.
MurmurHash3: Deprecate hash64 methods and hash methods accepting a String that use the default encoding.
BaseNCodec to expand buffer using overflow conscious code.
Base32/64: Fixed decoding check that all the final trailing bits to discard are zero.
Add MurmurHash3.hash128x64 methods to fix sign extension error during seeding in hash128 methods.
Add MurmurHash3.hash32x86 methods and IncrementalHash32x86 to fix sign extension error in hash32 methods.
Allow repeat calls to MurmurHash3.IncrementalHash32.end() to generate the same value.
Add RandomAccessFile digest methods #31.
Add Path APIs to org.apache.commons.codec.digest.DigestUtils similar to File APIs.
Add SHA-512/224 and SHA-512/256 to DigestUtils for Java 9 and up.
Add missing note in javadoc when sign extension error is present #34.
Reliance on default encoding in MurmurHash2 and MurmurHash3.
Don't reload standard Charsets in org.apache.commons.codec.Charsets.
Deprecate Charset constants in org.apache.commons.codec.Charsets in favor of java.nio.charset.StandardCharsets.
ColognePhonetic handles x incorrectly
ColognePhonetic does not treat the letter H correctly
Reject any decode request for a value that is impossible to encode to for Base32/Base64 rather than blindly decoding.
MurmurHash2 for 32-bit or 64-bit value.
MurmurHash3 for 32-bit or 128-bit value.
Broken direct java.nio.ByteBuffer support in org.apache.commons.codec.binary.Hex.
B64 salt generator: Random -> ThreadLocalRandom
Wrong value calculated by Cologne Phonetic if a special character is placed between equal letters
Update from Java 6 to Java 7
Add Percent-Encoding Codec (described in RFC3986 and RFC7578)
ColognePhoneticTest.testIsEncodeEquals missing assertions
Add SHA-3 methods in DigestUtils
Add support for XXHash32
Base32.decode should support lowercase letters
Soundex should support more algorithm variants
Base64.encodeBase64String could better use newStringUsAscii (ditto encodeBase64URLSafeString)
BaseNCodec: encodeToString and encodeAsString methods are identical
URLCodec is neither immutable nor threadsafe
StringUtils.equals(CharSequence cs1, CharSequence cs2) can fail with String Index OBE
URLCodec.WWW_FORM_URL should be private
StringUtils.newStringxxx(null) should return null, not NPE
Fluent interface for DigestUtils
Fluent interface for HmacUtils
Fix minor resource leaks
Drop obsolete Ant build
Add support for CRC32-C
HmacUtils.updateHmac calls reset() unnecessarily
Base32.HEX_DECODE_TABLE contains the wrong value 32
Charsets Javadoc breaks build when using Java 8
Bug in HW rule in Soundex
Javadoc for SHA-224 DigestUtils methods should mention Java 1.8.0 restriction instead of 1.4.0.
Don't deprecate Charsets Charset constants in favor of Java 7's java.nio.charset.StandardCharsets
Add HmacAlgorithms.HMAC_SHA_224 (Java 8 only)
Support JEP 287: SHA-3 Hash Algorithms
Create a minimal Digest command line utility: org.apache.commons.codec.digest.Digest
Add DigestUtils.getDigest(String, MessageDigest)
Make some DigestUtils APIs public
Add java.io.File APIs to MessageDigestAlgorithm
BaseNCodecOutputStream only supports writing EOF on close()
Support SHA-224 in DigestUtils on Java 8
Support java.nio.ByteBuffer in org.apache.commons.codec.binary.Hex
Support java.nio.ByteBuffer in DigestUtils
Add BaseNCodec.encode(byte[], int, int) input with offset and length parameters for Base64 and Base32.
Add convenience method decodeHex(String).
Add faster CRC32 implementation.
Add convenience API org.apache.commons.codec.binary.Hex.encodeHexString(byte[]|ByteBuffer, boolean).
Add Automatic-Module-Name manifest entry for Java 9.
Add Daitch-Mokotoff Soundex
QuotedPrintableCodec does not support soft line break per the 'quoted-printable' example on Wikipedia
Added clarification to Javadoc of Base64 concerning the use of the urlSafe parameter
Added clarification to the Javadoc of Base[32|64]OutputStream that it is mandatory to call close()
Add support for HMAC Message Authentication Code (MAC) digests
Beider Morse Phonetic Matching producing incorrect tokens
NullPointerException in DoubleMetaPhone.isDoubleMetaphoneEqual when using empty strings
Make possible to provide padding byte to BaseNCodec in constructor
Fix Javadoc 1.8.0 errors
Deprecate Charsets Charset constants in favor of Java 7's java.nio.charset.StandardCharsets
Fix Java 8 build Javadoc errors
Update from commons-parent 34 to 35
Improve performance of Beider Morse encoder
Beider Morse does not close Scanners used to read config files
Base32 decode table has spurious value
Link broken in Metaphone Javadoc
Spelling fixes in Javadoc and comments
Add DigestUtils.updateDigest(MessageDigest, InputStream).
Add JUnit to test our decode with pad character in the middle.
Add Match Rating Approach (MRA) phonetic algorithm encoder.
ColognePhonetic encoder unnecessarily creates many char arrays on every loop run.
Base64.encodeBase64URLSafeString doesn't add padding characters at the end.
DigestUtils: Add MD2 APIs.
DigestUtils: add APIs named after standard algorithm name SHA-1.
DigestUtils.getDigest(String) should throw IllegalArgumentException instead of RuntimeException.
Create a class MessageDigestAlgorithms to define standard algorithm names.
DigestUtils.getDigest(String) loses the original exception.
Remove unnecessary attempt to fill up the salt variable in UnixCrypt.
Remove unnecessary call to Math.abs().
More tests and minor things.
Added regression tests for PhoneticEngine based on Solr-3.6.0.
BeiderMorseEncoder/PhoneticEngine: make results deterministic by using a LinkedHashSet
instead of a HashSet.
StringBuffer could be replaced by StringBuilder for local variables.
DigestUtils: add updateDigest methods and make methods public.
Add classes for MD5/SHA1/SHA-512-based Unix crypt(3) hash variants.
Base64 encode() method is no longer thread-safe, breaking clients using it as a shared BinaryEncoder.
Note: the fix breaks binary compatibility, however the changes are to a class (BaseNCodec) which is
intended for internal use.
Complete FilterInputStream interface for BaseNCodecInputStream.
Use Charset objects when possible, create Charsets for required character encodings.
BeiderMorseEncoder OOM issues.
DoubleMetaphone Javadoc contains dead links.
Base64InputStream.skip skips underlying stream, not output.
Implement NYSIIS phonetic encoder.
Use standard Maven directory layout.
Documentation spelling fixes.
Fix various character encoding issues in comments and test cases.
Implement a Beider-Morse phonetic matching codec.
Migrate to Java 5.
Migrate to JUnit 4.
ColognePhonetic Javadoc should use HTML entities for special characters.
Added new Base32 encoder.
new Base64().encode() appends a CRLF, and chunks results into 76 character lines.
Many test cases use getBytes() which uses the default platform encoding so tests may fail on some platforms.
Add test(s) to check that encodeBase64() does not chunk output.
Base64 default constructor behavior changed to enable chunking in 1.4.
Base64.encodeBase64String() shouldn't chunk.
Base64InputStream#read(byte[]) incorrectly returns 0 at end of any stream which is multiple of 3 bytes long.
Typo in DecoderException message thrown from Hex.decodeHex.
ArrayIndexOutOfBoundsException when doing multiple reads() on encoding Base64InputStream.
Add the "Kölner Phonetik" encoder (Cologne Phonetic) to codec.lang.
org.apache.commons.codec.net.URLCodec.ESCAPE_CHAR isn't final but should be.
Base64.encodeBase64(byte[] binaryData, boolean isChunked, boolean urlSafe, int maxResultSize) throws IAE for valid maxResultSize if isChunked is false.
org.apache.commons.codec.language.RefinedSoundex.US_ENGLISH_MAPPING should be package protected MALICIOUS_CODE.
org.apache.commons.codec.language.Soundex.US_ENGLISH_MAPPING should be package protected MALICIOUS_CODE.
DoubleMetaphone.maxCodeLen should probably be private.
Remove deprecated package private method Base64.discardWhitespace(byte[])
Caverphone encodes names starting and ending with "mb" incorrectly.
Split Caverphone class into two classes for Caverphone 1.0 and 2.0.
Regression: Base64.encode(chunk=true) has a bug when input length is multiple of 76.
Base64 bug with empty input (new byte[0]).
Make Base64 URL-safe.
Allow for uppercase letters output in Hex.encodeHex().
Soundex and RefinedSoundex issues with character arrays.
Base64.isArrayByteBase64() method is inefficient for large byte arrays.
Thread safety and malicious code safety improvements.
isBase64 throws ArrayIndexOutOfBoundsException on some non-BASE64 bytes.
Fix case-insensitive string handling.
Base64.encodeBase64() throws NegativeArraySizeException on large files.
Implement Caverphone.
Character set used by Base64 not documented.
RefinedSoundex creates instance before al fields have been initialized.
Digest on InputStreams.
2 Test failures in SoundexTest.
Patch to add crypto-compatible BigInteger encoding support to Base64.
DigestUtils: Add methods for SHA-256, SHA-384, and SHA-512.
Using US_ENGLISH in Soundex caused an NullPointerException.
Source tarball spews files all over the place.
Base64.isArrayByteBase64() throws an ArrayIndexOutOfBoundsException for negative octets
Streaming Base64 (Base64InputStream and Base64OutputStream added).
Base64: Improve Code Coverage.
Add methods to Base64 which work with String instead of byte[].
Base64's new constructor parameters ignored.
Improve Double Metaphone test coverage.
Double Metaphone bugs in alternative encoding.
Make string2byte conversions independent of platform default encoding.
BinaryCodec: Encodes and decodes binary to and from Strings of 0s and 1s.
QuotedPrintableCodec: Codec for RFC 1521 MIME (Multipurpose Internet
Mail Extensions) Part One. Rules #3, #4, and #5 of the quoted-printable spec
are not implemented yet. See also issue CODEC-46.
BCodec: Identical to the Base64 encoding defined by RFC 1521 and allows a
character set to be specified.
QCodec: Similar to the Quoted-Printable content-transfer-encoding defined
in RFC 1521 and designed to allow text containing mostly ASCII characters to
be decipherable on an ASCII terminal without decoding.
Soundex: Implemented the DIFFERENCE algorithm.
RefinedSoundex: Implemented the DIFFERENCE algorithm.
This version is released under the
<a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License 2.0</a>
, please see LICENSE.txt. Previous versions were released under the
<a href="http://www.apache.org/licenses/LICENSE-1.1">Apache License 1.1</a>
The Board recommendation to remove Javadoc author tags has been
implemented. All author tags are now "Apache Software Foundation".
The default URL encoding logic was broken.
Base64 chunked encoding not compliant with RFC 2045 section 2.1 CRLF.
Hex converts illegal characters to 255.
Metaphone now correctly handles a silent B in a word that ends in MB.
"COMB" is encoded as "KM", before this fix "COMB" was encoded as "KMB".
Added missing tags in Javadoc comments.
General Javadoc improvements.
URLCodec: Implements the www-form-urlencoded encoding scheme.
DigestUtils: Calculates MD5 and SHA digests.
Modified Base64 to remedy non-compliance with RFC
2045. Non-Base64 characters were not being discarded during the
decode. RFC 2045 explicitly states that all characters outside of the
base64 alphabet are to be ignored.
Hex.decode(Object) throws a ClassCastException when a String argument is passed in.
Soundex: The HW rule is not applied; hyphens and apostrophes are not ignored.
Soundex.setMaxLength causes bugs and is not needed.
Calling Soundex.setMaxLength() with a value of 2 or less causes the wrong
answer to be returned. Since the encoding returned by Soundex is always
of length 4 by definition (we do not use the '-' in as a letter-nnn
separator) the need for a maxLength attribute is not needed. Deprecate
the field and accessor methods.
Fix in Metaphone relating to the handling of the maximum code length.
A newer version of the Base64 class reflecting improvements from
both the commons-httpclient and xml-rpc versions of code forked
from catalina.
Base64 class from commons-httpclient in org.apache.commons.codec.base64
has been retained for backwards compatibility but has been deprecated.
Soundex class from commons-util in org.apache.commons.codec.
Metaphone class from commons-util in org.apache.commons.codec.
RefinedSoundex class in org.apache.commons.codec.
Encoder/Decoder interfaces in org.apache.commons.
String and Binary specific Encoder/Decoder interfaces in org.apache.commons.
StringEncoderComparator replaces the SoundexComparator from the language package.
Base64 now discards whitespace characters when decoding encoded content.
Base64 class from commons-httpclient in org.apache.commons.codec.base64.
Soundex class from commons-util in org.apache.commons.codec.
Metaphone class from commons-util in org.apache.commons.codec.
SoundexComparator class from commons-util in org.apache.commons.codec.