[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