> ## Summary
> 
> Follow-up to [JDK-8341608](https://bugs.openjdk.org/browse/JDK-8341608), 
> which addressed `ClassFileError` propagation in jdeps but did not fix the 
> underlying signature parsing.
> 
> `SignaturesImpl.classTypeSig()` throws `IllegalArgumentException` when 
> parsing a class type signature that contains an empty identifier after the 
> inner class separator `.`.
> 
> ## Problem
> 
> The Scala compiler emits class type signatures such as:
> 
>     
> Lcoursierapi/shaded/scala/collection/immutable/TreeMap$TreeMapBuilder<TK;TV;>.;
> 
> Here the `.` after the type arguments is followed directly by `;` with no 
> inner class name. While this violates JVMS ยง4.7.9.1 (which requires an 
> identifier after `.`), such signatures exist widely in published Scala 
> artifacts on Maven Central and cannot be recompiled.
> 
> Running `jdeps` against JARs containing these signatures crashes with:
> 
>     Exception in thread "main" com.sun.tools.jdeps.Dependencies$ClassFileError
>     Caused by: java.lang.IllegalArgumentException:
>       Unexpected character ; at position 78, expected an identifier
> 
> ## Fix
> 
> In `classTypeSig()`, the identifier after `.` is now optional when an outer 
> type is already present. On the first iteration (no outer type), an 
> identifier is still strictly required.
> 
> ## Test
> 
> Added `LOuter<TK;TV;>.;` to `goodTypeSignatures` in `SignaturesTest`.

Hyeonsoo Lee has refreshed the contents of this pull request, and previous 
commits have been removed. The incremental views will show differences compared 
to the previous content of the PR. The pull request contains one new commit 
since the last revision:

  jdeps: catch ClassFileError in transitive dependency analysis path
  
  DependencyFinder.parse(Archive, Finder, String) is used by
  DepsAnalyzer.transitiveDeps() to resolve individual classes by name.
  Unlike ClassFileReader.forEachClassFile(), this code path did not
  catch Dependencies.ClassFileError, causing jdeps to crash when
  encountering malformed class files during transitive analysis.
  
  This is a follow-up to JDK-8341608, which added ClassFileError
  handling only in the initial archive parsing path.

-------------

Changes:
  - all: https://git.openjdk.org/jdk/pull/30041/files
  - new: https://git.openjdk.org/jdk/pull/30041/files/97d5464e..56417b83

Webrevs:
 - full: https://webrevs.openjdk.org/?repo=jdk&pr=30041&range=01
 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=30041&range=00-01

  Stats: 79 lines in 4 files changed: 67 ins; 4 del; 8 mod
  Patch: https://git.openjdk.org/jdk/pull/30041.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/30041/head:pull/30041

PR: https://git.openjdk.org/jdk/pull/30041

Reply via email to