RFR: 8343437: ClassDesc.of incorrectly permitting empty names [v2]

Chen Liang liach at openjdk.org
Fri Nov 1 19:24:05 UTC 2024


> 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


More information about the core-libs-dev mailing list