> In the patch for [JDK-8338544](https://bugs.openjdk.org/browse/JDK-8338544) > #20665, the validation methods `validateBinaryClassName` and > `validateInternalClassName` only checks if a separator char is the initial or > final char, or if it immediately follows another chars. This omitted the > case of empty strings, and allowed creation of invalid ClassDesc with empty > binary name, which is otherwise rejected by `ofDescriptor`. > > To better check for the separator char, the tracking mechanism is updated to > indicate a position where a separator char shouldn't appear, or where the > name string should not terminate. This is initially set to the initial > position 0, and upon each time of encountering a separator, this is updated > to the next char. > > This logic is similar to the existing one in `skipOverFieldSignature`, which > uses a boolean `legal` variable. Both reject empty strings, leading and > trailing separators, or consecutive separators. The new logic, however, does > not require repeated updates to the new `afterSeparator` variable upon > scanning each character. > > In addition, I noted the package name validation erroneously does not > prohibit leading, trailing, or consecutive separator chars. (Package names > are derived from class or interface names, so the same restrictions shall > apply) This patch also makes package name validation reuse class or > interface name validation in non-empty (unnamed package) cases, and added > those cases to the test suite.
Chen Liang has updated the pull request incrementally with one additional commit since the last revision: Comments to clarify, also align skipOverFieldSignature ------------- Changes: - all: https://git.openjdk.org/jdk/pull/21830/files - new: https://git.openjdk.org/jdk/pull/21830/files/79d4dd18..4325e94d Webrevs: - full: https://webrevs.openjdk.org/?repo=jdk&pr=21830&range=01 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=21830&range=00-01 Stats: 52 lines in 2 files changed: 18 ins; 11 del; 23 mod Patch: https://git.openjdk.org/jdk/pull/21830.diff Fetch: git fetch https://git.openjdk.org/jdk.git pull/21830/head:pull/21830 PR: https://git.openjdk.org/jdk/pull/21830