diff options
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | subprojects/plugin_hostlist/corpus/apple.txt | 1 | ||||
-rw-r--r-- | subprojects/plugin_hostlist/corpus/banana.txt | 1 | ||||
-rw-r--r-- | subprojects/plugin_hostlist/corpus/kiwi.txt | 1 | ||||
-rw-r--r-- | subprojects/plugin_hostlist/corpus/orange.txt | 1 | ||||
-rw-r--r-- | subprojects/plugin_hostlist/filterlist.cpp | 25 | ||||
-rw-r--r-- | subprojects/plugin_hostlist/filterlist.h (renamed from subprojects/plugin_hostlist/filterlist.hpp) | 0 | ||||
-rw-r--r-- | subprojects/plugin_hostlist/meson.build | 11 | ||||
-rw-r--r-- | subprojects/plugin_hostlist/plugin/plugin.cpp | 2 | ||||
-rw-r--r-- | subprojects/plugin_hostlist/test/filterlist.cpp | 2 | ||||
-rw-r--r-- | subprojects/plugin_hostlist/test/rule.cpp | 2 |
11 files changed, 36 insertions, 11 deletions
@@ -8,6 +8,7 @@ build* subprojects/* !subprojects/*.wrap !subprojects/plugin_* +subprojects/plugin_*/corpus lang/*.qm tools/src/crashhandler/defaults.go diff --git a/subprojects/plugin_hostlist/corpus/apple.txt b/subprojects/plugin_hostlist/corpus/apple.txt new file mode 100644 index 0000000..3a8973b --- /dev/null +++ b/subprojects/plugin_hostlist/corpus/apple.txt @@ -0,0 +1 @@ +127.0.0.1 localhost.localdomain diff --git a/subprojects/plugin_hostlist/corpus/banana.txt b/subprojects/plugin_hostlist/corpus/banana.txt new file mode 100644 index 0000000..c30aa84 --- /dev/null +++ b/subprojects/plugin_hostlist/corpus/banana.txt @@ -0,0 +1 @@ +0.0.0.0 blockeddomain.com diff --git a/subprojects/plugin_hostlist/corpus/kiwi.txt b/subprojects/plugin_hostlist/corpus/kiwi.txt new file mode 100644 index 0000000..77c325c --- /dev/null +++ b/subprojects/plugin_hostlist/corpus/kiwi.txt @@ -0,0 +1 @@ +# This is a comment, and after it comes a blank line diff --git a/subprojects/plugin_hostlist/corpus/orange.txt b/subprojects/plugin_hostlist/corpus/orange.txt new file mode 100644 index 0000000..583273d --- /dev/null +++ b/subprojects/plugin_hostlist/corpus/orange.txt @@ -0,0 +1 @@ +0.0.0.0 blockeddomain.first blockeddomain.second diff --git a/subprojects/plugin_hostlist/filterlist.cpp b/subprojects/plugin_hostlist/filterlist.cpp index 42be349..a0fd414 100644 --- a/subprojects/plugin_hostlist/filterlist.cpp +++ b/subprojects/plugin_hostlist/filterlist.cpp @@ -6,14 +6,26 @@ * SPDX-License-Identifier: GPL-3.0 */ -#include "filterlist.hpp" +#include "filterlist.h" #include <QIODevice> #include <QTextStream> using namespace Hostlist; +#ifdef FUZZER +extern "C" int LLVMFuzzerTestOneInput(const char *Data, long long Size) +{ + Filterlist::parseRule(QString::fromLatin1(Data, Size)); + return 0; +} +#endif + std::map<Filterlist::DomainHash, Filterlist::Rule> Filterlist::parseRule(const QString &line) { + if(line.isEmpty() || line.at(0) == '#') { + return {}; + } + auto parts = line.trimmed().split(' '); if(parts.size() < 2) { return {}; @@ -36,14 +48,11 @@ bool Filterlist::load(QIODevice &from) while(from.bytesAvailable() > 0) { const auto line = from.readLine(512).trimmed(); - if(!line.isEmpty() && line.at(0) != '#') { - auto r = parseRule(line); - if(!r.empty()) { - qDebug("merging in %lu rules", r.size()); - rules.merge(r); - } + auto r = parseRule(line); + if(!r.empty()) { + qDebug("merging in %lu rules", r.size()); + rules.merge(r); } } return true; } - diff --git a/subprojects/plugin_hostlist/filterlist.hpp b/subprojects/plugin_hostlist/filterlist.h index 7301f20..7301f20 100644 --- a/subprojects/plugin_hostlist/filterlist.hpp +++ b/subprojects/plugin_hostlist/filterlist.h diff --git a/subprojects/plugin_hostlist/meson.build b/subprojects/plugin_hostlist/meson.build index 04711fd..f4178c9 100644 --- a/subprojects/plugin_hostlist/meson.build +++ b/subprojects/plugin_hostlist/meson.build @@ -40,3 +40,14 @@ test('filterlist', executable('filterlist', dependencies: [dep_qt5, dep_catch, dep_hostlistfilter]), env: 'HOSTLIST_TXT='+meson.current_source_dir()/'test/hostlist.txt' ) + +# fuzzer +if meson.get_compiler('cpp').has_multi_arguments('-g', '-fsanitize=fuzzer') +executable('hostlist-fuzzer', + sources: 'filterlist.cpp', + include_directories: smolbote_interface, + dependencies: dep_qt5, + cpp_args: [ '-g', '-fsanitize=fuzzer', '-DFUZZER' ], + link_args: [ '-fsanitize=fuzzer' ] +) +endif diff --git a/subprojects/plugin_hostlist/plugin/plugin.cpp b/subprojects/plugin_hostlist/plugin/plugin.cpp index 2399510..28a7706 100644 --- a/subprojects/plugin_hostlist/plugin/plugin.cpp +++ b/subprojects/plugin_hostlist/plugin/plugin.cpp @@ -7,7 +7,7 @@ */ #include "plugin.h" -#include "filterlist.hpp" +#include "filterlist.h" FilterList* HostlistFilterPlugin::load(QIODevice &from) const { diff --git a/subprojects/plugin_hostlist/test/filterlist.cpp b/subprojects/plugin_hostlist/test/filterlist.cpp index fb71068..4aa532b 100644 --- a/subprojects/plugin_hostlist/test/filterlist.cpp +++ b/subprojects/plugin_hostlist/test/filterlist.cpp @@ -1,5 +1,5 @@ #define CATCH_CONFIG_MAIN -#include "filterlist.hpp" +#include "filterlist.h" #include <QFile> #include <catch2/catch.hpp> diff --git a/subprojects/plugin_hostlist/test/rule.cpp b/subprojects/plugin_hostlist/test/rule.cpp index 6b1ea70..b5ba6e0 100644 --- a/subprojects/plugin_hostlist/test/rule.cpp +++ b/subprojects/plugin_hostlist/test/rule.cpp @@ -1,5 +1,5 @@ #define CATCH_CONFIG_MAIN -#include "filterlist.hpp" +#include "filterlist.h" #include <catch2/catch.hpp> using namespace Hostlist; |