diff --git a/spring-core/src/main/java/org/springframework/asm/Type.java b/spring-core/src/main/java/org/springframework/asm/Type.java index e354c78e64b..5850ffdeb69 100644 --- a/spring-core/src/main/java/org/springframework/asm/Type.java +++ b/spring-core/src/main/java/org/springframework/asm/Type.java @@ -305,7 +305,8 @@ public final class Type { } if (methodDescriptor.charAt(currentOffset++) == 'L') { // Skip the argument descriptor content. - currentOffset = methodDescriptor.indexOf(';', currentOffset) + 1; + int semiColumnOffset = methodDescriptor.indexOf(';', currentOffset); + currentOffset = Math.max(currentOffset, semiColumnOffset + 1); } ++numArgumentTypes; } @@ -323,7 +324,8 @@ public final class Type { } if (methodDescriptor.charAt(currentOffset++) == 'L') { // Skip the argument descriptor content. - currentOffset = methodDescriptor.indexOf(';', currentOffset) + 1; + int semiColumnOffset = methodDescriptor.indexOf(';', currentOffset); + currentOffset = Math.max(currentOffset, semiColumnOffset + 1); } argumentTypes[currentArgumentTypeIndex++] = getTypeInternal(methodDescriptor, currentArgumentTypeOffset, currentOffset); @@ -393,7 +395,8 @@ public final class Type { } if (methodDescriptor.charAt(currentOffset++) == 'L') { // Skip the argument descriptor content. - currentOffset = methodDescriptor.indexOf(';', currentOffset) + 1; + int semiColumnOffset = methodDescriptor.indexOf(';', currentOffset); + currentOffset = Math.max(currentOffset, semiColumnOffset + 1); } } return currentOffset + 1; @@ -737,7 +740,8 @@ public final class Type { } if (methodDescriptor.charAt(currentOffset++) == 'L') { // Skip the argument descriptor content. - currentOffset = methodDescriptor.indexOf(';', currentOffset) + 1; + int semiColumnOffset = methodDescriptor.indexOf(';', currentOffset); + currentOffset = Math.max(currentOffset, semiColumnOffset + 1); } argumentsSize += 1; }