mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-29 19:45:01 +02:00
Fixed 73524 - CDT 2.0.1 freezes after trying to open a large .c file
This commit is contained in:
parent
f3b030d85d
commit
a76ec38690
2 changed files with 22 additions and 1 deletions
|
@ -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 );
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
|
|
Loading…
Add table
Reference in a new issue