diff options
author | Stephan Herrmann | 2020-01-23 14:47:03 +0000 |
---|---|---|
committer | Stephan Herrmann | 2020-01-23 18:11:44 +0000 |
commit | 7524d911155feb0decf44ddadea1a9585a4e3a97 (patch) | |
tree | f62f9c3c14370e14bc19a640ccdbe7dba575f517 | |
parent | 1406d4d38f0de44d13f89707295b071867b2237c (diff) | |
download | eclipse.jdt.core-7524d911155feb0decf44ddadea1a9585a4e3a97.tar.gz eclipse.jdt.core-7524d911155feb0decf44ddadea1a9585a4e3a97.tar.xz eclipse.jdt.core-7524d911155feb0decf44ddadea1a9585a4e3a97.zip |
Bug 559449 - Array index out of bounds inI20200126-0250I20200125-1805I20200124-1800I20200123-1800
org.eclipse.jdt.internal.compiler.ClassFile.isLikelyLocalTypeName
Change-Id: I4674c31ba48dfc105be9c2051bc7397bf8817fea
2 files changed, 21 insertions, 2 deletions
diff --git a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/GenericsRegressionTest_1_8.java b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/GenericsRegressionTest_1_8.java index 65a561804a..376e4b3b43 100644 --- a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/GenericsRegressionTest_1_8.java +++ b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/GenericsRegressionTest_1_8.java @@ -10041,4 +10041,23 @@ public void testBug508834_comment0() { runner.runConformTest(); // don't use pre-compiled p/X$1.class } + public void testBug559449() { + Runner runner = new Runner(); + runner.testFiles = new String[] { + "p/X.java", + "package p;\n" + + "public class X {\n" + + " class $$$ {}\n" + + " <S> void m() {\n" + + " Runnable r = () -> {\n" + + " $$$ ddd = new $$$();\n" + + " if (ddd != null)\n" + + " System.out.println(ddd);\n" + + " };\n" + + " r.run();\n" + + " }\n" + + "}\n" + }; + runner.runConformTest(); + } } diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ClassFile.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ClassFile.java index 7d1ea83dec..31407fcc1c 100644 --- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ClassFile.java +++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ClassFile.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2000, 2019 IBM Corporation and others. + * Copyright (c) 2000, 2020 IBM Corporation and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 @@ -5980,7 +5980,7 @@ public class ClassFile implements TypeConstants, TypeIds { private boolean isLikelyLocalTypeName(char[] typeName) { int dollarPos = CharOperation.lastIndexOf('$', typeName); - while (dollarPos != -1) { + while (dollarPos != -1 && dollarPos+1 < typeName.length) { if (Character.isDigit(typeName[dollarPos+1])) return true; // name segment starts with a digit => likely a local type (but still "$0" etc. could be part of the source name) dollarPos = CharOperation.lastIndexOf('$', typeName, 0, dollarPos-1); |