[CODEC-342] Base32.Builder#setEncodeTable(...) can create an instance that cannot decode its own output#436
Open
OldTruckDriver wants to merge 2 commits into
Conversation
Configure setHexDecodeTable(boolean) with the matching encode table instead of passing a decode lookup table to setEncodeTable(byte...). Add a regression test showing the configured codec encodes with the Base32-Hex alphabet and decodes its own output. Reviewed-by: OpenAI Codex Reviewed-by: Anthropic Claude Code
Derive Base32 decode tables from custom encode tables so a configured codec can decode its own output. Reject encode tables that do not contain exactly 32 unique byte values. Reviewed-by: OpenAI Codex Reviewed-by: Anthropic Claude Code
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Merge after [CODEC-343]
Summary
Fix
Base32.Builder#setEncodeTable(byte...)so custom Base32 alphabets derive a matching decode table and can decode their own output.Details
Previously, custom encode tables still used the standard Base32 decode table unless they exactly matched the built-in Base32-Hex table. This caused codecs with custom alphabets to encode correctly but decode incorrectly.
This change derives a decode table from custom 32-byte alphabets, rejects invalid or duplicate alphabet entries, and keeps the built-in Base32/Base32-Hex tables using their case-insensitive decoders.
Depends on CODEC-343, please merge CODEC-343 first.
Tests
mvn -q -Dtest=org.apache.commons.codec.binary.Base32Test testmvn -q javadoc:javadocmvn -q