From e6a4fe47b3586509487f886bbed83b50a622167e Mon Sep 17 00:00:00 2001 From: Marc-Andre Laperle Date: Wed, 1 Apr 2015 15:35:17 -0400 Subject: [PATCH] Bug 463723 - GCC output parser cannot parse macro with a combination of quotes and escapes Change-Id: I7b07d3e2cc706f5e7839189bd2968f69c5cad28c --- .../tests/GCCBuildCommandParserTest.java | 2 ++ .../providers/AbstractBuildCommandParser.java | 15 ++++++++++++++- .../settings/providers/GCCBuildCommandParser.java | 1 + 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/build/org.eclipse.cdt.managedbuilder.core.tests/tests/org/eclipse/cdt/managedbuilder/language/settings/providers/tests/GCCBuildCommandParserTest.java b/build/org.eclipse.cdt.managedbuilder.core.tests/tests/org/eclipse/cdt/managedbuilder/language/settings/providers/tests/GCCBuildCommandParserTest.java index 7c4b6670053..95547eedd39 100644 --- a/build/org.eclipse.cdt.managedbuilder.core.tests/tests/org/eclipse/cdt/managedbuilder/language/settings/providers/tests/GCCBuildCommandParserTest.java +++ b/build/org.eclipse.cdt.managedbuilder.core.tests/tests/org/eclipse/cdt/managedbuilder/language/settings/providers/tests/GCCBuildCommandParserTest.java @@ -682,6 +682,7 @@ public class GCCBuildCommandParserTest extends BaseTestCase { + " -D'MACRO5=\"quoted value\"'" + " -DMACRO6=\\\"escape-quoted value\\\"" + " -DMACRO7=\"'single-quoted value'\"" + + " -DMACRO8=\"\\\"escape-quoted value\\\"\"" + " file.cpp"); parser.shutdown(); @@ -702,6 +703,7 @@ public class GCCBuildCommandParserTest extends BaseTestCase { assertEquals(new CMacroEntry("MACRO5", "\"quoted value\"", 0), entries.get(5)); assertEquals(new CMacroEntry("MACRO6", "\"escape-quoted value\"", 0), entries.get(6)); assertEquals(new CMacroEntry("MACRO7", "'single-quoted value'", 0), entries.get(7)); + assertEquals(new CMacroEntry("MACRO8", "\"escape-quoted value\"", 0), entries.get(8)); } /** diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/language/settings/providers/AbstractBuildCommandParser.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/language/settings/providers/AbstractBuildCommandParser.java index 42296eb9998..c4ee1354914 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/language/settings/providers/AbstractBuildCommandParser.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/language/settings/providers/AbstractBuildCommandParser.java @@ -49,7 +49,20 @@ public abstract class AbstractBuildCommandParser extends AbstractLanguageSetting private static final String LEADING_PATH_PATTERN = "\\S+[/\\\\]"; //$NON-NLS-1$ - private static final Pattern OPTIONS_PATTERN = Pattern.compile("-[^\\s\"']*(\\s*((\".*?\")|('.*?')|([^-\\s][^\\s]+)))?"); //$NON-NLS-1$ + + /** + * "foo" + * Using look-ahead and look-behind to resolve ambiguity with "\" {@link #QUOTE_BSLASH_QUOTE} + */ + private static final String QUOTE = "(\"(?!\\\\).*?(?