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() );
|
assertTrue( quickParseCallback.problems.isEmpty() );
|
||||||
assertEquals( t.getName(), "testQueries"); //$NON-NLS-1$
|
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], ((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 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() {
|
private IToken scanIdentifier() {
|
||||||
|
@ -926,6 +929,16 @@ public class Scanner2 implements IScanner, IScannerData {
|
||||||
if( !escaped )
|
if( !escaped )
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
else if ( c == '\r')
|
||||||
|
{
|
||||||
|
if( bufferPos[bufferStackPos] + 1 < bufferLimit[bufferStackPos] &&
|
||||||
|
buffer[bufferPos[bufferStackPos] + 1 ] == '\n' )
|
||||||
|
{
|
||||||
|
++bufferPos[bufferStackPos];
|
||||||
|
if( !escaped)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
escaped = false;
|
escaped = false;
|
||||||
}
|
}
|
||||||
--stringLen;
|
--stringLen;
|
||||||
|
|
Loading…
Add table
Reference in a new issue