From 048ddb3469704059b4ec05ec1572abea9f368702 Mon Sep 17 00:00:00 2001 From: Markus Schorn Date: Fri, 30 May 2008 11:48:48 +0000 Subject: [PATCH] Fixes an ArrayOutOfBoundsException, bug 190884. --- .../parser/tests/scanner/PreprocessorBugsTests.java | 10 ++++++++++ .../internal/core/parser/scanner/CPreprocessor.java | 10 ++++++++-- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/scanner/PreprocessorBugsTests.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/scanner/PreprocessorBugsTests.java index 2b0f329886c..86a776868d4 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/scanner/PreprocessorBugsTests.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/scanner/PreprocessorBugsTests.java @@ -121,4 +121,14 @@ public class PreprocessorBugsTests extends PreprocessorTestsBase { validateEOF(); validateProblemCount(0); } + + // "unintentionally unbounded + // " + // + public void testUnboundedEmptyStringLiteral_Bug190884() throws Exception { + initializeScanner(); + validateString("unintentionally unbounded"); + validateEOF(); + validateProblemCount(2); + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/CPreprocessor.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/CPreprocessor.java index 9a81eadbc30..776a4fe3837 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/CPreprocessor.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/CPreprocessor.java @@ -532,8 +532,14 @@ public class CPreprocessor implements ILexerLog, IScanner, IAdaptable { private void appendStringContent(StringBuffer buf, Token t1) { final char[] image= t1.getCharImage(); - final int start= image[0]=='"' ? 1 : 2; - buf.append(image, start, image.length-start-1); + final int length= image.length; + if (length > 1) { + final int start= image[0]=='"' ? 1 : 2; + final int diff= image[length-1] == '"' ? length-start-1 : length-start; + if (diff > 0) { + buf.append(image, start, diff); + } + } } Token internalFetchToken(final boolean expandMacros, final boolean isPPCondition, final boolean stopAtNewline,