From a76ec38690ae18cc27860c9b5ccbdd39006e8446 Mon Sep 17 00:00:00 2001 From: John Camelon Date: Thu, 9 Sep 2004 18:33:49 +0000 Subject: [PATCH] Fixed 73524 - CDT 2.0.1 freezes after trying to open a large .c file --- .../cdt/core/parser/tests/QuickParseASTTests.java | 8 ++++++++ .../internal/core/parser/scanner2/Scanner2.java | 15 ++++++++++++++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/QuickParseASTTests.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/QuickParseASTTests.java index c36e3bd302a..7b939ba48ef 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/QuickParseASTTests.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/QuickParseASTTests.java @@ -2224,4 +2224,12 @@ public class QuickParseASTTests extends BaseASTTest assertTrue( quickParseCallback.problems.isEmpty() ); assertEquals( t.getName(), "testQueries"); //$NON-NLS-1$ } + + public void testBug73524() throws Exception + { + Writer writer = new StringWriter(); + writer.write( "static char fmt_1002[] = \"(/,\\002At iterate\\002,i5,4x,\\002f= \\002,1p,d12\\\r\n" ); //$NON-NLS-1$ + writer.write( ".5,4x,\\002|proj g|= \\002,1p,d12.5)\";" ); //$NON-NLS-1$ + IASTVariable v = (IASTVariable) assertSoleDeclaration( writer.toString(), ParserLanguage.C ); + } } \ No newline at end of file diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/Scanner2.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/Scanner2.java index 56ac3aa661c..4adaab58a00 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/Scanner2.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/Scanner2.java @@ -799,7 +799,10 @@ public class Scanner2 implements IScanner, IScannerData { return new ImagedExpansionToken( signal, buffer, bufferPos[mostRelevant], ((ObjectStyleMacro)bufferData[bufferStackPos]).name.length, getCurrentFilename(), getLineNumber( bufferPos[bufferStackPos] + 1) ); return new ImagedExpansionToken( signal, buffer, bufferPos[mostRelevant], ((FunctionStyleMacro)bufferData[bufferStackPos]).name.length, getCurrentFilename(), getLineNumber( bufferPos[bufferStackPos] + 1)); } - return new ImagedToken(signal, buffer, bufferPos[bufferStackPos] + 1 , getCurrentFilename(), getLineNumber( bufferPos[bufferStackPos] + 1)); + IToken i = new ImagedToken(signal, buffer, bufferPos[bufferStackPos] + 1 , getCurrentFilename(), getLineNumber( bufferPos[bufferStackPos] + 1)); + if( buffer != null && buffer.length == 0 ) + bufferPos[bufferStackPos] += 1; //ensure we don't hit infinite loops + return i; } private IToken scanIdentifier() { @@ -926,6 +929,16 @@ public class Scanner2 implements IScanner, IScannerData { if( !escaped ) break; } + else if ( c == '\r') + { + if( bufferPos[bufferStackPos] + 1 < bufferLimit[bufferStackPos] && + buffer[bufferPos[bufferStackPos] + 1 ] == '\n' ) + { + ++bufferPos[bufferStackPos]; + if( !escaped) + break; + } + } escaped = false; } --stringLen;