From 4412c851abd18e05370a4071d13279afcf16de01 Mon Sep 17 00:00:00 2001 From: Nathan Ridge Date: Tue, 16 May 2017 02:19:36 -0400 Subject: [PATCH] Bug 516686 - ArrayIndexOutOfBoundsException in CPPASTLiteralExpression.computeStringLiteralSize() Change-Id: I45ce05315c57847bf8ae784b2fe7569a72716894 --- .../core/dom/parser/cpp/CPPASTLiteralExpression.java | 8 +++++++- .../internal/core/dom/parser/cpp/GNUCPPSourceParser.java | 2 +- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTLiteralExpression.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTLiteralExpression.java index c095b5a095f..b77475fdc09 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTLiteralExpression.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTLiteralExpression.java @@ -121,7 +121,13 @@ public class CPPASTLiteralExpression extends ASTNode implements ICPPASTLiteralEx return fSuffix; } - public void setSuffix(char[] suffix) { + public void addSuffix(char[] suffix) { + setSuffix(suffix); + // Make sure fValue reflects the added suffix. + fValue = CharArrayUtils.concat(fValue, suffix); + } + + private void setSuffix(char[] suffix) { this.fSuffix = suffix; } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GNUCPPSourceParser.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GNUCPPSourceParser.java index 30dea4837df..46ea9c12431 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GNUCPPSourceParser.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GNUCPPSourceParser.java @@ -2005,7 +2005,7 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { return literalExprWithRange; } IToken opName = consume(IToken.tIDENTIFIER); - ((CPPASTLiteralExpression) literalExprWithRange).setSuffix(opName.getCharImage()); + ((CPPASTLiteralExpression) literalExprWithRange).addSuffix(opName.getCharImage()); setRange(literalExprWithRange, offset, opName.getEndOffset()); } }