[CODEC-341] Fix Base16 custom alphabet decode table#434
Open
OldTruckDriver wants to merge 1 commit into
Open
Conversation
Derive Base16 decode tables from custom encode tables so a configured codec can decode its own output. Reject encode tables that do not contain exactly 16 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.
JIRA: https://issues.apache.org/jira/browse/CODEC-341
Problem
Base16.Builder#setEncodeTable(...)honors a custom alphabet for encoding, but only ever pairs it with the built-in upper/lower decode table. ABase16built with any other alphabet, therefore, cannot decode its own output.Fix
Derive the decode table from the configured encode table (
toDecodeTable), so a custom alphabet round-trips. Encode tables that are not 16 unique bytes are rejected withIllegalArgumentException.Notes (behavior changes)
setEncodeTable(...)now throwsIllegalArgumentExceptionfor tables that are not 16 unique bytes (previously accepted, producing undecodable output).Builder#setLowerCase(true)now also sets the matching decode table; before,builder().setLowerCase(true)could not decode its own lower-casea–foutput.Tests
Added to
Base16Test: custom-alphabet round-trip, rejection of duplicate and wrong-length tables, and abuilder().setLowerCase(true)round-trip that fails without this change.Verification
mvnpasses locally (tests, Checkstyle, PMD, Javadoc).