This is an automated email from the ASF dual-hosted git repository.
jamesbognar pushed a commit to branch docs
in repository https://gitbox.apache.org/repos/asf/juneau.git
The following commit(s) were added to refs/heads/docs by this push:
new e90b8f39d5 docs: add release note for HoconTokenizer =+ lookahead bug
fix (TODO-137)
e90b8f39d5 is described below
commit e90b8f39d597eaa651e84d15c7f7b4786426b10a
Author: James Bognar <[email protected]>
AuthorDate: Thu May 28 16:23:57 2026 -0400
docs: add release note for HoconTokenizer =+ lookahead bug fix (TODO-137)
Co-authored-by: Cursor <[email protected]>
---
pages/release-notes/9.5.0.md | 1 +
1 file changed, 1 insertion(+)
diff --git a/pages/release-notes/9.5.0.md b/pages/release-notes/9.5.0.md
index c0e74456cf..ec3a7428b3 100644
--- a/pages/release-notes/9.5.0.md
+++ b/pages/release-notes/9.5.0.md
@@ -198,6 +198,7 @@ Closes out the format-control extension work (TODO-4 /
TODO-50 / TODO-52 / TODO-
- **Parser dispatch for collection-element / top-level `byte[]` (Bug #12)**
— Toml / Proto / Hjson / Hocon parsers now consult `BinarySwap.unswap` for
`byte[]` collection elements and top-level values at non-`NOT_SET` formats, so
wire forms like `"0001ff807f102030"` (HEX) decode to the correct 8-byte array
instead of a 16-byte ASCII char array.
- **`BinaryFormat.BASE64_URL` hint (Bug #9)** — `BinaryFormat.parse(String)`
now honors the `BASE64_URL` constant directly (routing to
`Base64.getUrlDecoder()` which accepts missing padding) before falling through
to the format-agnostic wire-shape sniff. Non-3-aligned URL-safe payloads
without `-` / `_` chars no longer fail with "Invalid BASE64 string length".
- **Hocon parser-fragility (Bugs #10, #15)** —
`HoconWriter.QUOTE_VALUE_CHARS` extended to cover `=` (BASE64 padding), `+`
(`+NNNN` timezone offsets), and `$` (nested-class `BINARY_NAME`);
`HoconTokenizer` recursion guard now throws a clean `IOException` instead of
`StackOverflowError`; `HoconParserSession.parseArray` / `parseObject`
array-flatten bug fixed (nested arrays no longer collapse via spurious
array-concatenation).
+ - **`HoconTokenizer` `=+` lookahead bug (TODO-137)** —
`HoconTokenizer.readTokenImmediate` incorrectly guarded the `EQUALS` emission
with `peekChar() != '+'`, causing any `=+` character sequence in the input to
throw `IOException("Unexpected character '='")` instead of emitting `EQUALS`.
Since the `+=` (PLUS_EQUALS) operator is already handled by an independent
branch that reads `+` first, the lookahead on the `=` branch was both
unnecessary and wrong. The guard has been removed; `=` i [...]
- **`ClassFormat.FQCN` nested-types / arrays parser-fragility (Bug #16)** —
`ClassFormat.parse` now resolves nested types (`java.util.Map.Entry` →
`java.util.Map$Entry`), array suffixes (`int[]`, `java.lang.String[][]`), and
leaf primitives (`Class.forName("int")` previously rejected; now resolves
through a primitive-name table).
- **`Currency` default-swap registration (Bug #6)** — `Currency` added to
`DefaultSwaps` (sibling of the existing `Locale` / `TimeZone` / `ZoneId`
entries) so `Currency` bean properties round-trip at the default
`CurrencyFormat.ISO_CODE` / `NOT_SET` levels.
- **UrlEncoding-expanded empty `byte[]` (Bug #13)** — empty `byte[]`
properties now round-trip as `byte[0]` instead of `null` through the
expanded-params UrlEncoding flavor.