diff options
author | Andrew Niefer | 2005-07-22 19:21:28 +0000 |
---|---|---|
committer | Andrew Niefer | 2005-07-22 19:21:28 +0000 |
commit | fb62ab1e5c37e4eda1aabeccef867cd0373fc5b7 (patch) | |
tree | c573c5ef5c7e66e8bf8d2abfe63abb5c3cc6bf9e | |
parent | ede231c47ea363ce703637c2d7939dccaf1dc0c4 (diff) | |
download | org.eclipse.cdt-fb62ab1e5c37e4eda1aabeccef867cd0373fc5b7.tar.gz org.eclipse.cdt-fb62ab1e5c37e4eda1aabeccef867cd0373fc5b7.tar.xz org.eclipse.cdt-fb62ab1e5c37e4eda1aabeccef867cd0373fc5b7.zip |
fix ArrayIndexOutOfBoundsException from bug 84270
2 files changed, 13 insertions, 0 deletions
diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/scanner2/Scanner2Test.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/scanner2/Scanner2Test.java index 98c8b7b3bd0..7f01a23b491 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/scanner2/Scanner2Test.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/scanner2/Scanner2Test.java @@ -2354,4 +2354,14 @@ public class Scanner2Test extends BaseScanner2Test validateEOF(); } + public void testbug84270() throws Exception { + Writer writer = new StringWriter(); + writer.write("#define h g( ~\n"); //$NON-NLS-1$ + writer.write("#define g f\n"); //$NON-NLS-1$ + writer.write("#define f(a) f(x * (a))\n"); //$NON-NLS-1$ + writer.write("h 5) \n"); //$NON-NLS-1$ + initializeScanner( writer.toString() ); + fullyTokenize(); + } + } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/BaseScanner.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/BaseScanner.java index 68f1f2a97a1..9a42a858c9d 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/BaseScanner.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/BaseScanner.java @@ -3979,6 +3979,9 @@ abstract class BaseScanner implements IScanner { while (bufferPos[bufferStackPos] < limit) { skipOverWhiteSpace(); + if( bufferPos[bufferStackPos] + 1 >= limit ) + break; + if (buffer[++bufferPos[bufferStackPos]] == ')') { // end of macro break; |