[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    [KDevelop] bbcc13a: don't crash/assert on empty include directives
From:       Milian Wolff <mail () milianw ! de>
Date:       2010-12-06 11:02:40
Message-ID: 20101206110240.6B8BDA60B0 () git ! kde ! org
[Download RAW message or body]

commit bbcc13aa26ae85976357355367d14b2f29b52b6b
branch master
Author: Milian Wolff <mail@milianw.de>
Date:   Mon Dec 6 12:02:24 2010 +0100

    don't crash/assert on empty include directives
    
    BUG: 258972

diff --git a/languages/cpp/parser/rpp/pp-engine.cpp \
b/languages/cpp/parser/rpp/pp-engine.cpp index 0336a03..2d0e9ea 100644
--- a/languages/cpp/parser/rpp/pp-engine.cpp
+++ b/languages/cpp/parser/rpp/pp-engine.cpp
@@ -155,6 +155,10 @@ void pp::handle_directive(uint directive, Stream& input, Stream& \
output)  
 void pp::handle_include(bool skip_current_path, Stream& input, Stream& output)
 {
+  if (input.atEnd()) {
+    createProblem(input, i18n("invalid include directive"));
+    return;
+  }
   QByteArray bytes = \
KDevelop::IndexedString::fromIndex(input.current()).byteArray();  if (bytes.size() > \
0 && (isLetter(bytes.at(0)) || bytes.at(0) == '_')) {  pp_macro_expander \
                expand_include(this);
diff --git a/languages/cpp/parser/tests/test_parser.cpp \
b/languages/cpp/parser/tests/test_parser.cpp index c03ede3..b4dddc2 100644
--- a/languages/cpp/parser/tests/test_parser.cpp
+++ b/languages/cpp/parser/tests/test_parser.cpp
@@ -458,7 +458,6 @@ private slots:
 
   void testStringConcatenation()
   {
-    rpp::Preprocessor preprocessor;
     QCOMPARE(preprocess("Hello##You"), QString("HelloYou"));
     QCOMPARE(preprocess("#define CONCAT(Var1, Var2) Var1##Var2\nCONCAT(var1, \
                )").trimmed(), QString("var1"));
     QCOMPARE(preprocess("#define CONCAT(Var1, Var2) Var1##Var2\nCONCAT(, \
var2)").trimmed(), QString("var2")); @@ -470,6 +469,18 @@ private slots:
     QCOMPARE(preprocess("#define GLUE(a, b, c) k ## l ## m\nGLUE(a, b, \
c)").trimmed(), QString("klm"));  }
 
+  void testEmptyInclude()
+  {
+    // testcase for https://bugs.kde.org/show_bug.cgi?id=258972
+    rpp::Preprocessor preprocessor;
+    rpp::pp pp(&preprocessor);
+    pp.processFile("anonymous", QByteArray("#include\n\nint main(){\n    ;\n}\n"));
+    QCOMPARE(pp.problems().count(), 1);
+    qDebug() << pp.problems().first()->description();
+    QCOMPARE(pp.problems().first()->finalLocation().start, KDevelop::SimpleCursor(0, \
8)); +    QCOMPARE(pp.problems().first()->finalLocation().end, \
KDevelop::SimpleCursor(0, 8)); +  }
+
   void testCondition()
   {
     QByteArray method("bool i = (small < big || big > small);");


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic