diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/compiled/SignatureParsing.java b/java/java-psi-impl/src/com/intellij/psi/impl/compiled/SignatureParsing.java index 215b50a65720..de619887b92b 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/compiled/SignatureParsing.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/compiled/SignatureParsing.java @@ -98,15 +98,18 @@ public class SignatureParsing { } } - private static String parseTypeVariableRefSignature(CharacterIterator signature) { + private static String parseTypeVariableRefSignature(CharacterIterator signature) throws ClsFormatException { StringBuilder id = new StringBuilder(); signature.next(); - while (signature.current() != ';' && signature.current() != '>') { + while (signature.current() != ';' && signature.current() != '>' && signature.current() != CharacterIterator.DONE) { id.append(signature.current()); signature.next(); } + if (signature.current() == CharacterIterator.DONE) { + throw new ClsFormatException(); + } if (signature.current() == ';') { signature.next(); } diff --git a/java/java-tests/testSrc/com/intellij/psi/SignatureParsingTest.java b/java/java-tests/testSrc/com/intellij/psi/SignatureParsingTest.java index f885131bdc73..3b794b1161e1 100644 --- a/java/java-tests/testSrc/com/intellij/psi/SignatureParsingTest.java +++ b/java/java-tests/testSrc/com/intellij/psi/SignatureParsingTest.java @@ -41,6 +41,11 @@ public class SignatureParsingTest { assertEquals("p.Obj$.I