From 757ce6fd2620b7cd04211b711d7f0003368f9d04 Mon Sep 17 00:00:00 2001 From: John Camelon Date: Fri, 30 Jan 2004 16:13:25 +0000 Subject: [PATCH] This is the same (simple) fix as was applied last night on the HEAD branch for https://bugs.eclipse.org/bugs/show_bug.cgi?id=50821 The consequences of not applying it is that the scanner's error handling strategy causes an out-of-memory error to happen on a unterminated character literal when CModelBuilder kicks in (i.e. on save or reconcile). --- core/org.eclipse.cdt.core.tests/.project | 8 ++++++++ core/org.eclipse.cdt.core.tests/ChangeLog | 3 +++ .../eclipse/cdt/core/parser/tests/ScannerTestCase.java | 9 +++++++++ core/org.eclipse.cdt.core/.project | 8 ++++++++ core/org.eclipse.cdt.core/parser/ChangeLog | 3 +++ .../org/eclipse/cdt/internal/core/parser/Scanner.java | 2 +- 6 files changed, 32 insertions(+), 1 deletion(-) diff --git a/core/org.eclipse.cdt.core.tests/.project b/core/org.eclipse.cdt.core.tests/.project index 132ec729ab8..5429058f69c 100644 --- a/core/org.eclipse.cdt.core.tests/.project +++ b/core/org.eclipse.cdt.core.tests/.project @@ -3,7 +3,9 @@ org.eclipse.cdt.core.tests + org.apache.xerces org.eclipse.cdt.core + org.eclipse.cdt.core.aix org.eclipse.cdt.core.linux org.eclipse.cdt.core.qnx org.eclipse.cdt.core.solaris @@ -11,6 +13,12 @@ org.eclipse.cdt.make.core org.eclipse.cdt.managedbuilder.core org.eclipse.cdt.ui + org.eclipse.core.boot + org.eclipse.core.resources + org.eclipse.core.runtime + org.eclipse.swt + org.eclipse.ui + org.junit diff --git a/core/org.eclipse.cdt.core.tests/ChangeLog b/core/org.eclipse.cdt.core.tests/ChangeLog index 9a2fdd622cc..b68b61bab50 100644 --- a/core/org.eclipse.cdt.core.tests/ChangeLog +++ b/core/org.eclipse.cdt.core.tests/ChangeLog @@ -1,3 +1,6 @@ +2004-01-29 John Camelon + Added ScannerTestCase::testBug50821(). + 2003-11-07 John Camelon Moved testBug39554() from ASTFailedTests to QuickParseASTTests. diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ScannerTestCase.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ScannerTestCase.java index 64823bc6d92..3b299d25d5f 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ScannerTestCase.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ScannerTestCase.java @@ -1528,4 +1528,13 @@ public class ScannerTestCase extends BaseScannerTest assertEquals( callback.inclusions.size(), 1 ); assertEquals( callback.inclusions.get(0), "stdio.h"); } + + public void testBug50821() throws Exception + { + Callback callback = new Callback( ParserMode.QUICK_PARSE ); + initializeScanner( "\'\n\n\n", ParserMode.QUICK_PARSE, callback ); + scanner.nextToken(); + assertEquals( callback.problems.size(), 1 ); + } + } diff --git a/core/org.eclipse.cdt.core/.project b/core/org.eclipse.cdt.core/.project index 95eceb11fac..ba2680f0072 100644 --- a/core/org.eclipse.cdt.core/.project +++ b/core/org.eclipse.cdt.core/.project @@ -3,6 +3,14 @@ org.eclipse.cdt.core + org.apache.xerces + org.eclipse.compare + org.eclipse.core.boot + org.eclipse.core.resources + org.eclipse.core.runtime + org.eclipse.debug.core + org.eclipse.search + org.eclipse.team.core diff --git a/core/org.eclipse.cdt.core/parser/ChangeLog b/core/org.eclipse.cdt.core/parser/ChangeLog index 77fdac40be7..0a63834dbb0 100644 --- a/core/org.eclipse.cdt.core/parser/ChangeLog +++ b/core/org.eclipse.cdt.core/parser/ChangeLog @@ -1,3 +1,6 @@ +2004-01-29 John Camelon + Fixed Bug 50821 - Freezes when opening / saving .c file + 2003-11-07 John Camelon Fixed Bug 39554 : _Pragma directive is not supported (ANSI C99) diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/Scanner.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/Scanner.java index d3a89fcfc06..8bcfd2b4ba8 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/Scanner.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/Scanner.java @@ -1616,7 +1616,7 @@ public class Scanner implements IScanner { ( c == NOCHAR ) ) { handleProblem( IProblem.SCANNER_BAD_CHARACTER, new Character( (char)c ).toString(),beginOffset, false, true, throwExceptionOnBadCharacterRead ); - c = ' '; + c = '\''; } // exit condition if ( ( c =='\'' ) && ( prev != '\\' || prevPrev == '\\' ) ) break;