Skip to content

[CODEC-342] Base32.Builder#setEncodeTable(...) can create an instance that cannot decode its own output#436

Open
OldTruckDriver wants to merge 2 commits into
apache:masterfrom
OldTruckDriver:fix/CODEC-342_base32_custom_alphabet_decode
Open

[CODEC-342] Base32.Builder#setEncodeTable(...) can create an instance that cannot decode its own output#436
OldTruckDriver wants to merge 2 commits into
apache:masterfrom
OldTruckDriver:fix/CODEC-342_base32_custom_alphabet_decode

Conversation

@OldTruckDriver

Copy link
Copy Markdown

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 test
  • mvn -q javadoc:javadoc
  • mvn -q

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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant