< prev index next >

src/java.base/share/classes/jdk/internal/org/objectweb/asm/util/CheckClassAdapter.java

Print this page
*** 631,11 ***
          int pos = 0;
          if (getChar(signature, 0) == '<') {
              pos = checkTypeParameters(signature, pos);
          }
          pos = checkClassTypeSignature(signature, pos);
!         while (getChar(signature, pos) == 'L') {
              pos = checkClassTypeSignature(signature, pos);
          }
          if (pos != signature.length()) {
              throw new IllegalArgumentException(signature + ERROR_AT + pos);
          }
--- 631,11 ---
          int pos = 0;
          if (getChar(signature, 0) == '<') {
              pos = checkTypeParameters(signature, pos);
          }
          pos = checkClassTypeSignature(signature, pos);
!         while (getChar(signature, pos) == 'L' || getChar(signature, pos) == 'Q') {
              pos = checkClassTypeSignature(signature, pos);
          }
          if (pos != signature.length()) {
              throw new IllegalArgumentException(signature + ERROR_AT + pos);
          }

*** 659,22 ***
          int pos = 0;
          if (getChar(signature, 0) == '<') {
              pos = checkTypeParameters(signature, pos);
          }
          pos = checkChar('(', signature, pos);
!         while ("ZCBSIFJDL[T".indexOf(getChar(signature, pos)) != -1) {
              pos = checkJavaTypeSignature(signature, pos);
          }
          pos = checkChar(')', signature, pos);
          if (getChar(signature, pos) == 'V') {
              ++pos;
          } else {
              pos = checkJavaTypeSignature(signature, pos);
          }
          while (getChar(signature, pos) == '^') {
              ++pos;
!             if (getChar(signature, pos) == 'L') {
                  pos = checkClassTypeSignature(signature, pos);
              } else {
                  pos = checkTypeVariableSignature(signature, pos);
              }
          }
--- 659,22 ---
          int pos = 0;
          if (getChar(signature, 0) == '<') {
              pos = checkTypeParameters(signature, pos);
          }
          pos = checkChar('(', signature, pos);
!         while ("ZCBSIFJDLQ[T".indexOf(getChar(signature, pos)) != -1) {
              pos = checkJavaTypeSignature(signature, pos);
          }
          pos = checkChar(')', signature, pos);
          if (getChar(signature, pos) == 'V') {
              ++pos;
          } else {
              pos = checkJavaTypeSignature(signature, pos);
          }
          while (getChar(signature, pos) == '^') {
              ++pos;
!             if (getChar(signature, pos) == 'L' || getChar(signature, pos) == 'Q') {
                  pos = checkClassTypeSignature(signature, pos);
              } else {
                  pos = checkTypeVariableSignature(signature, pos);
              }
          }

*** 786,11 ***
          // SimpleClassTypeSignature:
          //   Identifier [TypeArguments]
          // ClassTypeSignatureSuffix:
          //   . SimpleClassTypeSignature
          int pos = startPos;
!         pos = checkChar('L', signature, pos);
          pos = checkSignatureIdentifier(signature, pos);
          while (getChar(signature, pos) == '/') {
              pos = checkSignatureIdentifier(signature, pos + 1);
          }
          if (getChar(signature, pos) == '<') {
--- 786,16 ---
          // SimpleClassTypeSignature:
          //   Identifier [TypeArguments]
          // ClassTypeSignatureSuffix:
          //   . SimpleClassTypeSignature
          int pos = startPos;
!         if (getChar(signature, pos) == 'L' || getChar(signature, pos) == 'Q') {
+             pos = pos + 1;
+         } else {
+             throw new IllegalArgumentException(signature + ": 'L' or 'Q' expected at index " + pos);
+         }
+ 
          pos = checkSignatureIdentifier(signature, pos);
          while (getChar(signature, pos) == '/') {
              pos = checkSignatureIdentifier(signature, pos + 1);
          }
          if (getChar(signature, pos) == '<') {
< prev index next >