Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrew Niefer2005-07-22 19:21:28 +0000
committerAndrew Niefer2005-07-22 19:21:28 +0000
commitfb62ab1e5c37e4eda1aabeccef867cd0373fc5b7 (patch)
treec573c5ef5c7e66e8bf8d2abfe63abb5c3cc6bf9e
parentede231c47ea363ce703637c2d7939dccaf1dc0c4 (diff)
downloadorg.eclipse.cdt-fb62ab1e5c37e4eda1aabeccef867cd0373fc5b7.tar.gz
org.eclipse.cdt-fb62ab1e5c37e4eda1aabeccef867cd0373fc5b7.tar.xz
org.eclipse.cdt-fb62ab1e5c37e4eda1aabeccef867cd0373fc5b7.zip
fix ArrayIndexOutOfBoundsException from bug 84270
-rw-r--r--core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/scanner2/Scanner2Test.java10
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/BaseScanner.java3
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;

Back to the top