Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAnton Leherbauer2007-06-04 09:59:18 +0000
committerAnton Leherbauer2007-06-04 09:59:18 +0000
commitebc8d3f9d6fc0ea83497a0c76a21fc3d61697ec6 (patch)
treea35345bf5331ee9f88778ada18b2be77e9607298 /build/org.eclipse.cdt.make.core.tests
parent9aed98b36d205a76dcc3939ef26e84bdf8aa09c2 (diff)
downloadorg.eclipse.cdt-ebc8d3f9d6fc0ea83497a0c76a21fc3d61697ec6.tar.gz
org.eclipse.cdt-ebc8d3f9d6fc0ea83497a0c76a21fc3d61697ec6.tar.xz
org.eclipse.cdt-ebc8d3f9d6fc0ea83497a0c76a21fc3d61697ec6.zip
Fix for 186065: StringIndexOutOfBoundsException in GCCScannerInfoConsoleParser
Patch by Sergey Prigogin (Google)
Diffstat (limited to 'build/org.eclipse.cdt.make.core.tests')
-rw-r--r--build/org.eclipse.cdt.make.core.tests/src/org/eclipse/cdt/make/builder/tests/ScannerConfigConsoleParserTests.java155
1 files changed, 90 insertions, 65 deletions
diff --git a/build/org.eclipse.cdt.make.core.tests/src/org/eclipse/cdt/make/builder/tests/ScannerConfigConsoleParserTests.java b/build/org.eclipse.cdt.make.core.tests/src/org/eclipse/cdt/make/builder/tests/ScannerConfigConsoleParserTests.java
index 7110da7b662..9113217f15c 100644
--- a/build/org.eclipse.cdt.make.core.tests/src/org/eclipse/cdt/make/builder/tests/ScannerConfigConsoleParserTests.java
+++ b/build/org.eclipse.cdt.make.core.tests/src/org/eclipse/cdt/make/builder/tests/ScannerConfigConsoleParserTests.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2004, 2006 IBM Corporation and others.
+ * Copyright (c) 2004, 2007 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
*
* Contributors:
* IBM - Initial API and implementation
+ * Anton Leherbauer (Wind River Systems)
*******************************************************************************/
package org.eclipse.cdt.make.builder.tests;
@@ -73,45 +74,45 @@ public class ScannerConfigConsoleParserTests extends TestCase {
// initialize it with the utility
clParser.startup(null, null, collector, null);
- clParser.processLine("gcc -I /dir/include -I C:\\dir\\include -ID:/dir/include -c test.c"); // absolute paths
- clParser.processLine("gcc -I -I /dir2/include -c test.c"); // empty -I
- clParser.processLine("gcc -I../back_dir/include -I./cur_dir/include -c test.c"); // relative paths
- clParser.processLine("gcc '-I /squoted/dir1' -I '/squoted/dir2' -I'/squoted/dir3' -c test.c"); // single quote dirs
- clParser.processLine("gcc \"-I /dquoted/dir1\" -I \"/dquoted/dir2\" -I\"/dquoted/dir3\" -c test.c"); // double quote dirs
- clParser.processLine("gcc '-I /with spaces 1' -I'/with spaces 2' -c test.c"); // dirs with spaces 1,2
- clParser.processLine("gcc \"-I /with spaces 3\" -I \"/with spaces 4\" -c test.c"); // dirs with spaces 3,4
- clParser.processLine("gcc -I /with\\ spaces\\ 5 -c test.c"); // dirs with spaces 5
- clParser.processLine("gcc -I '\\\\server1\\include' '-I\\\\server2\\include' -I \"\\\\server3\\include\" -c test.c"); // UNC paths
- clParser.processLine("gcc -I //server4/include -I '//server5/include' '-I//server6/include' -c test.c"); // UNC paths
- clParser.processLine("gcc -I \\");
- clParser.processLine("/multiline\\");
- clParser.processLine("/dir -c test.c"); // multiline
+ clParser.processLine("gcc -I /dir/include -I C:\\dir\\include -ID:/dir/include -c test.c"); // absolute paths //$NON-NLS-1$
+ clParser.processLine("gcc -I -I /dir2/include -c test.c"); // empty -I //$NON-NLS-1$
+ clParser.processLine("gcc -I../back_dir/include -I./cur_dir/include -c test.c"); // relative paths //$NON-NLS-1$
+ clParser.processLine("gcc '-I /squoted/dir1' -I '/squoted/dir2' -I'/squoted/dir3' -c test.c"); // single quote dirs //$NON-NLS-1$
+ clParser.processLine("gcc \"-I /dquoted/dir1\" -I \"/dquoted/dir2\" -I\"/dquoted/dir3\" -c test.c"); // double quote dirs //$NON-NLS-1$
+ clParser.processLine("gcc '-I /with spaces 1' -I'/with spaces 2' -c test.c"); // dirs with spaces 1,2 //$NON-NLS-1$
+ clParser.processLine("gcc \"-I /with spaces 3\" -I \"/with spaces 4\" -c test.c"); // dirs with spaces 3,4 //$NON-NLS-1$
+ clParser.processLine("gcc -I /with\\ spaces\\ 5 -c test.c"); // dirs with spaces 5 //$NON-NLS-1$
+ clParser.processLine("gcc -I '\\\\server1\\include' '-I\\\\server2\\include' -I \"\\\\server3\\include\" -c test.c"); // UNC paths //$NON-NLS-1$
+ clParser.processLine("gcc -I //server4/include -I '//server5/include' '-I//server6/include' -c test.c"); // UNC paths //$NON-NLS-1$
+ clParser.processLine("gcc -I \\"); //$NON-NLS-1$
+ clParser.processLine("/multiline\\"); //$NON-NLS-1$
+ clParser.processLine("/dir -c test.c"); // multiline //$NON-NLS-1$
List sumIncludes = collector.getCollectedScannerInfo(null, ScannerInfoTypes.INCLUDE_PATHS);
- assertTrue(sumIncludes.contains("/dir/include"));
- assertTrue(sumIncludes.contains("C:\\dir\\include"));
- assertTrue(sumIncludes.contains("D:/dir/include"));
- assertTrue(sumIncludes.contains("/dir2/include"));
- assertTrue(sumIncludes.contains("../back_dir/include"));
- assertTrue(sumIncludes.contains("./cur_dir/include"));
- assertTrue(sumIncludes.contains("/squoted/dir1"));
- assertTrue(sumIncludes.contains("/squoted/dir2"));
- assertTrue(sumIncludes.contains("/squoted/dir3"));
- assertTrue(sumIncludes.contains("/dquoted/dir1"));
- assertTrue(sumIncludes.contains("/dquoted/dir2"));
- assertTrue(sumIncludes.contains("/dquoted/dir3"));
- assertTrue(sumIncludes.contains("/with spaces 1"));
- assertTrue(sumIncludes.contains("/with spaces 2"));
- assertTrue(sumIncludes.contains("/with spaces 3"));
- assertTrue(sumIncludes.contains("/with spaces 4"));
- assertTrue(sumIncludes.contains("/with spaces 5"));
- assertTrue(sumIncludes.contains("\\\\server1\\include"));
- assertTrue(sumIncludes.contains("\\\\server2\\include"));
- assertTrue(sumIncludes.contains("\\\\server3\\include"));
- assertTrue(sumIncludes.contains("//server4/include"));
- assertTrue(sumIncludes.contains("//server5/include"));
- assertTrue(sumIncludes.contains("//server6/include"));
- assertTrue(sumIncludes.contains("/multiline/dir"));
+ assertTrue(sumIncludes.contains("/dir/include")); //$NON-NLS-1$
+ assertTrue(sumIncludes.contains("C:\\dir\\include")); //$NON-NLS-1$
+ assertTrue(sumIncludes.contains("D:/dir/include")); //$NON-NLS-1$
+ assertTrue(sumIncludes.contains("/dir2/include")); //$NON-NLS-1$
+ assertTrue(sumIncludes.contains("../back_dir/include")); //$NON-NLS-1$
+ assertTrue(sumIncludes.contains("./cur_dir/include")); //$NON-NLS-1$
+ assertTrue(sumIncludes.contains("/squoted/dir1")); //$NON-NLS-1$
+ assertTrue(sumIncludes.contains("/squoted/dir2")); //$NON-NLS-1$
+ assertTrue(sumIncludes.contains("/squoted/dir3")); //$NON-NLS-1$
+ assertTrue(sumIncludes.contains("/dquoted/dir1")); //$NON-NLS-1$
+ assertTrue(sumIncludes.contains("/dquoted/dir2")); //$NON-NLS-1$
+ assertTrue(sumIncludes.contains("/dquoted/dir3")); //$NON-NLS-1$
+ assertTrue(sumIncludes.contains("/with spaces 1")); //$NON-NLS-1$
+ assertTrue(sumIncludes.contains("/with spaces 2")); //$NON-NLS-1$
+ assertTrue(sumIncludes.contains("/with spaces 3")); //$NON-NLS-1$
+ assertTrue(sumIncludes.contains("/with spaces 4")); //$NON-NLS-1$
+ assertTrue(sumIncludes.contains("/with spaces 5")); //$NON-NLS-1$
+ assertTrue(sumIncludes.contains("\\\\server1\\include")); //$NON-NLS-1$
+ assertTrue(sumIncludes.contains("\\\\server2\\include")); //$NON-NLS-1$
+ assertTrue(sumIncludes.contains("\\\\server3\\include")); //$NON-NLS-1$
+ assertTrue(sumIncludes.contains("//server4/include")); //$NON-NLS-1$
+ assertTrue(sumIncludes.contains("//server5/include")); //$NON-NLS-1$
+ assertTrue(sumIncludes.contains("//server6/include")); //$NON-NLS-1$
+ assertTrue(sumIncludes.contains("/multiline/dir")); //$NON-NLS-1$
assertTrue(sumIncludes.size() == 24);
}
@@ -131,33 +132,33 @@ public class ScannerConfigConsoleParserTests extends TestCase {
// initialize it with the utility
clParser.startup(null, null, collector, null);
- clParser.processLine("gcc -DMACRO1 -D MACRO2=value2 -c test.c"); // simple definitions
- clParser.processLine("gcc -D -DMACRO3 -c test.c"); // empty -D
- clParser.processLine("gcc -D MACRO4='value4' -D 'MACRO5=value5' '-D MACRO6 = value6' -c test.c"); // single quotes
- clParser.processLine("gcc -D'MACRO7=\"value 7\"' -D MACRO8='\"value 8\"' -c test.c"); // single quotes
- clParser.processLine("gcc -DMACRO9=\"value9\" -D \"MACRO10=value10\" \"-D MACRO11 = value11\" -c test.c"); // double quotes
- clParser.processLine("gcc -D\"MACRO12=\\\"value 12\\\"\" -D MACRO13=\"\\\"value 13\\\"\" -c test.c"); // single quotes
- clParser.processLine("gcc -D \\");
- clParser.processLine("MULTILINE=TRUE \\");
- clParser.processLine("-c test.c"); // multiline
- clParser.processLine("gcc -D 'SUM(x, y) = (x) + (y)' -c test.c"); // more complex macro definition
+ clParser.processLine("gcc -DMACRO1 -D MACRO2=value2 -c test.c"); // simple definitions //$NON-NLS-1$
+ clParser.processLine("gcc -D -DMACRO3 -c test.c"); // empty -D //$NON-NLS-1$
+ clParser.processLine("gcc -D MACRO4='value4' -D 'MACRO5=value5' '-D MACRO6 = value6' -c test.c"); // single quotes //$NON-NLS-1$
+ clParser.processLine("gcc -D'MACRO7=\"value 7\"' -D MACRO8='\"value 8\"' -c test.c"); // single quotes //$NON-NLS-1$
+ clParser.processLine("gcc -DMACRO9=\"value9\" -D \"MACRO10=value10\" \"-D MACRO11 = value11\" -c test.c"); // double quotes //$NON-NLS-1$
+ clParser.processLine("gcc -D\"MACRO12=\\\"value 12\\\"\" -D MACRO13=\"\\\"value 13\\\"\" -c test.c"); // single quotes //$NON-NLS-1$
+ clParser.processLine("gcc -D \\"); //$NON-NLS-1$
+ clParser.processLine("MULTILINE=TRUE \\"); //$NON-NLS-1$
+ clParser.processLine("-c test.c"); // multiline //$NON-NLS-1$
+ clParser.processLine("gcc -D 'SUM(x, y) = (x) + (y)' -c test.c"); // more complex macro definition //$NON-NLS-1$
List sumSymbols = collector.getCollectedScannerInfo(null, ScannerInfoTypes.SYMBOL_DEFINITIONS);
- assertTrue(sumSymbols.contains("MACRO1"));
- assertTrue(sumSymbols.contains("MACRO2=value2"));
- assertTrue(sumSymbols.contains("MACRO3"));
- assertTrue(sumSymbols.contains("MACRO4=value4"));
- assertTrue(sumSymbols.contains("MACRO5=value5"));
- assertTrue(sumSymbols.contains("MACRO6 = value6"));
- assertTrue(sumSymbols.contains("MACRO7=\"value 7\""));
- assertTrue(sumSymbols.contains("MACRO8=\"value 8\""));
- assertTrue(sumSymbols.contains("MACRO9=value9"));
- assertTrue(sumSymbols.contains("MACRO10=value10"));
- assertTrue(sumSymbols.contains("MACRO11 = value11"));
- assertTrue(sumSymbols.contains("MACRO12=\"value 12\""));
- assertTrue(sumSymbols.contains("MACRO13=\"value 13\""));
- assertTrue(sumSymbols.contains("MULTILINE=TRUE"));
- assertTrue(sumSymbols.contains("SUM(x, y) = (x) + (y)"));
+ assertTrue(sumSymbols.contains("MACRO1")); //$NON-NLS-1$
+ assertTrue(sumSymbols.contains("MACRO2=value2")); //$NON-NLS-1$
+ assertTrue(sumSymbols.contains("MACRO3")); //$NON-NLS-1$
+ assertTrue(sumSymbols.contains("MACRO4=value4")); //$NON-NLS-1$
+ assertTrue(sumSymbols.contains("MACRO5=value5")); //$NON-NLS-1$
+ assertTrue(sumSymbols.contains("MACRO6 = value6")); //$NON-NLS-1$
+ assertTrue(sumSymbols.contains("MACRO7=\"value 7\"")); //$NON-NLS-1$
+ assertTrue(sumSymbols.contains("MACRO8=\"value 8\"")); //$NON-NLS-1$
+ assertTrue(sumSymbols.contains("MACRO9=value9")); //$NON-NLS-1$
+ assertTrue(sumSymbols.contains("MACRO10=value10")); //$NON-NLS-1$
+ assertTrue(sumSymbols.contains("MACRO11 = value11")); //$NON-NLS-1$
+ assertTrue(sumSymbols.contains("MACRO12=\"value 12\"")); //$NON-NLS-1$
+ assertTrue(sumSymbols.contains("MACRO13=\"value 13\"")); //$NON-NLS-1$
+ assertTrue(sumSymbols.contains("MULTILINE=TRUE")); //$NON-NLS-1$
+ assertTrue(sumSymbols.contains("SUM(x, y) = (x) + (y)")); //$NON-NLS-1$
assertTrue(sumSymbols.size() == 15);
}
@@ -177,10 +178,34 @@ public class ScannerConfigConsoleParserTests extends TestCase {
// initialize it with the utility
clParser.startup(null, null, collector, null);
- clParser.processLine("gcc -DMACRO1 -I ..\\inc -c ..\\source\\source.c"); // PR 80271
+ clParser.processLine("gcc -DMACRO1 -I ..\\inc -c ..\\source\\source.c"); // PR 80271 //$NON-NLS-1$
List sumSymbols = collector.getCollectedScannerInfo(null, ScannerInfoTypes.SYMBOL_DEFINITIONS);
- assertTrue(sumSymbols.contains("MACRO1"));
+ assertTrue(sumSymbols.contains("MACRO1")); //$NON-NLS-1$
+ assertTrue(sumSymbols.size() == 1);
+ }
+
+ public void testParsingUnbalancedDoubleQuote_Bug186065() throws Exception {
+ IScannerInfoCollector collector = new IScannerInfoCollector() {
+ private List sumSymbols = new ArrayList();
+ public void contributeToScannerConfig(Object resource, Map scannerInfo) {
+ sumSymbols.addAll((List) scannerInfo.get(ScannerInfoTypes.SYMBOL_DEFINITIONS));
+ }
+ public List getCollectedScannerInfo(Object resource, ScannerInfoTypes type) {
+ if (type.equals(ScannerInfoTypes.SYMBOL_DEFINITIONS)) {
+ return sumSymbols;
+ }
+ return new ArrayList();
+ }
+ };
+ // initialize it with the utility
+ clParser.startup(null, null, collector, null);
+
+ clParser.processLine("../src/bug186065.cc:8: error: missing terminating \" character"); // PR 80271 //$NON-NLS-1$
+ clParser.processLine("gcc -DBUG186065_IS_FIXED"); //$NON-NLS-1$
+
+ List sumSymbols = collector.getCollectedScannerInfo(null, ScannerInfoTypes.SYMBOL_DEFINITIONS);
+ assertTrue(sumSymbols.contains("BUG186065_IS_FIXED")); //$NON-NLS-1$
assertTrue(sumSymbols.size() == 1);
}
}

Back to the top