aboutsummaryrefslogtreecommitdiff
path: root/subprojects
diff options
context:
space:
mode:
authorAqua-sama <aqua@iserlohn-fortress.net>2020-04-23 17:47:39 +0300
committerAqua-sama <aqua@iserlohn-fortress.net>2020-04-23 17:47:39 +0300
commitaa7e8fe1a90fbba289aec9b59a872170a0c593c2 (patch)
treef755844140350029b949a022be74570b3f1b1b70 /subprojects
parentplugin_hostlist: add fuzzer (diff)
downloadsmolbote-aa7e8fe1a90fbba289aec9b59a872170a0c593c2.tar.xz
move subprojects/plugin_hostlist to plugins/smolblok_hostlist
Diffstat (limited to 'subprojects')
-rw-r--r--subprojects/plugin_hostlist/corpus/apple.txt1
-rw-r--r--subprojects/plugin_hostlist/corpus/banana.txt1
-rw-r--r--subprojects/plugin_hostlist/corpus/kiwi.txt1
-rw-r--r--subprojects/plugin_hostlist/corpus/orange.txt1
-rw-r--r--subprojects/plugin_hostlist/filterlist.cpp58
-rw-r--r--subprojects/plugin_hostlist/filterlist.h58
l---------subprojects/plugin_hostlist/include1
-rw-r--r--subprojects/plugin_hostlist/meson.build53
-rw-r--r--subprojects/plugin_hostlist/plugin/plugin.cpp32
-rw-r--r--subprojects/plugin_hostlist/plugin/plugin.h28
-rw-r--r--subprojects/plugin_hostlist/plugin/smolblokHostlistPlugin.json4
-rw-r--r--subprojects/plugin_hostlist/test/filterlist.cpp29
-rw-r--r--subprojects/plugin_hostlist/test/hostlist.txt6
-rw-r--r--subprojects/plugin_hostlist/test/rule.cpp57
14 files changed, 0 insertions, 330 deletions
diff --git a/subprojects/plugin_hostlist/corpus/apple.txt b/subprojects/plugin_hostlist/corpus/apple.txt
deleted file mode 100644
index 3a8973b..0000000
--- a/subprojects/plugin_hostlist/corpus/apple.txt
+++ /dev/null
@@ -1 +0,0 @@
-127.0.0.1 localhost.localdomain
diff --git a/subprojects/plugin_hostlist/corpus/banana.txt b/subprojects/plugin_hostlist/corpus/banana.txt
deleted file mode 100644
index c30aa84..0000000
--- a/subprojects/plugin_hostlist/corpus/banana.txt
+++ /dev/null
@@ -1 +0,0 @@
-0.0.0.0 blockeddomain.com
diff --git a/subprojects/plugin_hostlist/corpus/kiwi.txt b/subprojects/plugin_hostlist/corpus/kiwi.txt
deleted file mode 100644
index 77c325c..0000000
--- a/subprojects/plugin_hostlist/corpus/kiwi.txt
+++ /dev/null
@@ -1 +0,0 @@
-# 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
deleted file mode 100644
index 583273d..0000000
--- a/subprojects/plugin_hostlist/corpus/orange.txt
+++ /dev/null
@@ -1 +0,0 @@
-0.0.0.0 blockeddomain.first blockeddomain.second
diff --git a/subprojects/plugin_hostlist/filterlist.cpp b/subprojects/plugin_hostlist/filterlist.cpp
deleted file mode 100644
index a0fd414..0000000
--- a/subprojects/plugin_hostlist/filterlist.cpp
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * This file is part of smolbote. It's copyrighted by the contributors recorded
- * in the version control history of the file, available from its original
- * location: https://library.iserlohn-fortress.net/aqua/smolbote.git
- *
- * SPDX-License-Identifier: GPL-3.0
- */
-
-#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 {};
- }
-
- const auto redirect = (parts[0] == "0.0.0.0") ? QString() : parts[0];
-
- std::map<DomainHash, Rule> r;
- for(int i = 1; i < parts.size(); ++i) {
- r.emplace(qHash(parts[i], 0), Filterlist::Rule{ parts[i], redirect });
- }
- return r;
-}
-
-bool Filterlist::load(QIODevice &from)
-{
- if(!from.isReadable() || !from.isTextModeEnabled()) {
- return false;
- }
-
- while(from.bytesAvailable() > 0) {
- const auto line = from.readLine(512).trimmed();
- 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.h b/subprojects/plugin_hostlist/filterlist.h
deleted file mode 100644
index 7301f20..0000000
--- a/subprojects/plugin_hostlist/filterlist.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * This file is part of smolbote. It's copyrighted by the contributors recorded
- * in the version control history of the file, available from its original
- * location: https://library.iserlohn-fortress.net/aqua/smolbote.git
- *
- * SPDX-License-Identifier: GPL-3.0
- */
-
-#pragma once
-
-#include <map>
-#include <smolbote/filterinterface.hpp>
-
-namespace Hostlist
-{
-
-class Filterlist final : public FilterList
-{
-public:
- typedef uint DomainHash;
- struct Rule {
- QString domain;
- QString redirect;
- };
-
- Filterlist() = default;
- ~Filterlist() = default;
-
- [[nodiscard]] bool findMatch(const QString &domain) const
- {
- const auto hash = qHash(domain, 0);
- const auto found = rules.find(hash);
- if(found != rules.end()) {
- return true;
- }
- return false;
- }
- int count() const
- {
- return rules.size();
- }
-
- [[nodiscard]] bool filter(QWebEngineUrlRequestInfo &info) const
- {
- return false;
- }
- [[nodiscard]] bool isUpToDate() const
- {
- return true;
- }
-
- bool load(QIODevice &device);
- [[nodiscard]] static std::map<DomainHash, Rule> parseRule(const QString &line);
-
-private:
- std::map<DomainHash, Rule> rules;
-};
-} // namespace Hostlist
diff --git a/subprojects/plugin_hostlist/include b/subprojects/plugin_hostlist/include
deleted file mode 120000
index 3611dd2..0000000
--- a/subprojects/plugin_hostlist/include
+++ /dev/null
@@ -1 +0,0 @@
-../../include/ \ No newline at end of file
diff --git a/subprojects/plugin_hostlist/meson.build b/subprojects/plugin_hostlist/meson.build
deleted file mode 100644
index f4178c9..0000000
--- a/subprojects/plugin_hostlist/meson.build
+++ /dev/null
@@ -1,53 +0,0 @@
-project('hostlistfilter', 'cpp')
-
-mod_qt5 = import('qt5')
-dep_qt5 = dependency('qt5',
- modules: [ 'Core', 'Network', 'WebEngineWidgets' ],
- include_type: 'system'
-)
-dep_catch = dependency('catch2', required: true, fallback: ['catch2', 'catch2_dep'] )
-
-smolbote_interface = include_directories('include')
-
-lib_hostlistfilter = static_library('hostlistfilter',
- [ 'filterlist.cpp' ],
- include_directories: smolbote_interface,
- dependencies: [dep_qt5]
-)
-
-dep_hostlistfilter = declare_dependency(
- include_directories: [ '.', smolbote_interface ],
- link_with: lib_hostlistfilter
-)
-
-# plugin
-plugin = shared_library('smolblokHostlistPlugin',
- [ 'plugin/plugin.cpp',
- mod_qt5.preprocess(include_directories: smolbote_interface, moc_headers: 'plugin/plugin.h', dependencies: dep_qt5) ],
- include_directories: smolbote_interface,
- dependencies: [ dep_hostlistfilter, dep_qt5 ],
- install: true,
- install_dir: get_option('libdir')/'smolbote/plugins'
-)
-
-# tests
-test('rule parsing', executable('rule',
- sources: 'test/rule.cpp',
- dependencies: [dep_qt5, dep_catch, dep_hostlistfilter]))
-
-test('filterlist', executable('filterlist',
- sources: 'test/filterlist.cpp',
- 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
deleted file mode 100644
index 28a7706..0000000
--- a/subprojects/plugin_hostlist/plugin/plugin.cpp
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * This file is part of smolbote. It's copyrighted by the contributors recorded
- * in the version control history of the file, available from its original
- * location: https://library.iserlohn-fortress.net/aqua/smolbote.git
- *
- * SPDX-License-Identifier: GPL-3.0
- */
-
-#include "plugin.h"
-#include "filterlist.h"
-
-FilterList* HostlistFilterPlugin::load(QIODevice &from) const
-{
- if(!from.isOpen())
- return nullptr;
-
- auto *list = new Hostlist::Filterlist;
- return list;
-}
-
-bool HostlistFilterPlugin::parse(FilterList *list, QIODevice &from) const
-{
- if(list == nullptr || !from.isOpen()) {
- return false;
- }
- auto *l = dynamic_cast<Hostlist::Filterlist*>(list);
- if(l == nullptr) {
- return false;
- }
- return l->load(from);
-}
-
diff --git a/subprojects/plugin_hostlist/plugin/plugin.h b/subprojects/plugin_hostlist/plugin/plugin.h
deleted file mode 100644
index 53b5d36..0000000
--- a/subprojects/plugin_hostlist/plugin/plugin.h
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * This file is part of smolbote. It's copyrighted by the contributors recorded
- * in the version control history of the file, available from its original
- * location: https://library.iserlohn-fortress.net/aqua/smolbote.git
- *
- * SPDX-License-Identifier: GPL-3.0
- */
-
-#ifndef SMOLBLOK_FILTER_PLUGIN_H
-#define SMOLBLOK_FILTER_PLUGIN_H
-
-#include <smolbote/filterinterface.hpp>
-
-class HostlistFilterPlugin : public QObject, public FilterPlugin
-{
- Q_OBJECT
- Q_PLUGIN_METADATA(IID FilterPluginIid FILE "smolblokHostlistPlugin.json")
- Q_INTERFACES(FilterPlugin)
-
-public:
- ~HostlistFilterPlugin() = default;
-
- FilterList *load(QIODevice &from) const override;
- bool parse(FilterList *list, QIODevice &from) const override;
-};
-
-#endif // SMOLBLOK_FILTER_PLUGIN_H
-
diff --git a/subprojects/plugin_hostlist/plugin/smolblokHostlistPlugin.json b/subprojects/plugin_hostlist/plugin/smolblokHostlistPlugin.json
deleted file mode 100644
index aa53cdd..0000000
--- a/subprojects/plugin_hostlist/plugin/smolblokHostlistPlugin.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{
- "name": "smolblok Hostlist filter plugin",
- "author": "Aqua <aqua@iserlohn-fortress.net>"
-}
diff --git a/subprojects/plugin_hostlist/test/filterlist.cpp b/subprojects/plugin_hostlist/test/filterlist.cpp
deleted file mode 100644
index 4aa532b..0000000
--- a/subprojects/plugin_hostlist/test/filterlist.cpp
+++ /dev/null
@@ -1,29 +0,0 @@
-#define CATCH_CONFIG_MAIN
-#include "filterlist.h"
-#include <QFile>
-#include <catch2/catch.hpp>
-
-using namespace Hostlist;
-
-TEST_CASE("Hostlist")
-{
- Filterlist list;
-
- const QString filename(qgetenv("HOSTLIST_TXT"));
- REQUIRE(!filename.isEmpty());
-
- QFile f(filename);
- REQUIRE(f.open(QIODevice::ReadOnly | QIODevice::Text));
-
- REQUIRE(list.load(f));
- f.close();
-
- REQUIRE(list.count() == 4);
-
- REQUIRE(list.findMatch("blockeddomain.first"));
- REQUIRE(list.findMatch("blockeddomain.second"));
-
- REQUIRE(list.findMatch("localhost.localdomain"));
-
- REQUIRE(!list.findMatch("other.domain"));
-}
diff --git a/subprojects/plugin_hostlist/test/hostlist.txt b/subprojects/plugin_hostlist/test/hostlist.txt
deleted file mode 100644
index a0b4e5c..0000000
--- a/subprojects/plugin_hostlist/test/hostlist.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-# This is a comment, and after it comes a blank line
-
-127.0.0.1 localhost.localdomain
-
-0.0.0.0 blockeddomain.com
-0.0.0.0 blockeddomain.first blockeddomain.second
diff --git a/subprojects/plugin_hostlist/test/rule.cpp b/subprojects/plugin_hostlist/test/rule.cpp
deleted file mode 100644
index b5ba6e0..0000000
--- a/subprojects/plugin_hostlist/test/rule.cpp
+++ /dev/null
@@ -1,57 +0,0 @@
-#define CATCH_CONFIG_MAIN
-#include "filterlist.h"
-#include <catch2/catch.hpp>
-
-using namespace Hostlist;
-
-SCENARIO("Hostlist::Rule")
-{
- GIVEN("an invalid rule")
- {
- const auto rule = Filterlist::parseRule("0.0.0.0 ");
- REQUIRE(rule.empty());
- }
- GIVEN("127.0.0.1 localhost.localdomain")
- {
- auto rule = Filterlist::parseRule("127.0.0.1 localhost.localdomain");
-
- REQUIRE(!rule.empty());
- REQUIRE(rule.size() == 1);
-
- // note: you need to force it to hash a string, rather than the address itself
- const auto index = qHash(QString("localhost.localdomain"), 0);
- REQUIRE(rule[index].domain == "localhost.localdomain");
- REQUIRE(rule[index].redirect == "127.0.0.1");
- }
-
- GIVEN("0.0.0.0 blockeddomain.com")
- {
- auto rule = Filterlist::parseRule("0.0.0.0 blockeddomain.com");
-
- REQUIRE(!rule.empty());
- REQUIRE(rule.size() == 1);
-
- const auto index = qHash(QString("blockeddomain.com"), 0);
- REQUIRE(rule[index].domain == "blockeddomain.com");
- REQUIRE(rule[index].redirect.isEmpty());
- ;
- }
-
- GIVEN("0.0.0.0 blockeddomain.first blockeddomain.second")
- {
- auto rule = Filterlist::parseRule("0.0.0.0 blockeddomain.first blockeddomain.second");
-
- REQUIRE(!rule.empty());
- REQUIRE(rule.size() == 2);
- {
- const auto index = qHash(QString("blockeddomain.first"), 0);
- REQUIRE(rule[index].domain == "blockeddomain.first");
- REQUIRE(rule[index].redirect.isEmpty());
- }
- {
- const auto index = qHash(QString("blockeddomain.second"), 0);
- REQUIRE(rule[index].domain == "blockeddomain.second");
- REQUIRE(rule[index].redirect.isEmpty());
- }
- }
-}