aboutsummaryrefslogtreecommitdiff
path: root/plugins/HostlistFilter/filterlist.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/HostlistFilter/filterlist.cpp')
-rw-r--r--plugins/HostlistFilter/filterlist.cpp54
1 files changed, 26 insertions, 28 deletions
diff --git a/plugins/HostlistFilter/filterlist.cpp b/plugins/HostlistFilter/filterlist.cpp
index a0fd414..8faa4ef 100644
--- a/plugins/HostlistFilter/filterlist.cpp
+++ b/plugins/HostlistFilter/filterlist.cpp
@@ -10,49 +10,47 @@
#include <QIODevice>
#include <QTextStream>
-using namespace Hostlist;
-
-#ifdef FUZZER
-extern "C" int LLVMFuzzerTestOneInput(const char *Data, long long Size)
+inline void Hostlist::parseRule(const QString &line, QStringList &blocked, QHash<QString, QString> &redirected)
{
- 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 {};
- }
+ if(line.isEmpty() || line.at(0) == '#')
+ return;
auto parts = line.trimmed().split(' ');
- if(parts.size() < 2) {
- return {};
- }
+ if(parts.size() < 2)
+ return;
- const auto redirect = (parts[0] == "0.0.0.0") ? QString() : parts[0];
+ if(parts[0] == "0.0.0.0") {
+ parts.pop_front();
+ blocked << parts;
+ return;
+ }
- std::map<DomainHash, Rule> r;
for(int i = 1; i < parts.size(); ++i) {
- r.emplace(qHash(parts[i], 0), Filterlist::Rule{ parts[i], redirect });
+ redirected.insert(parts[i], parts[0]);
}
- return r;
}
-bool Filterlist::load(QIODevice &from)
+#ifdef FUZZER
+extern "C" int LLVMFuzzerTestOneInput(const char *Data, long long Size)
+{
+ QStringList b;
+ QHash<QString, QString> r;
+ Hostlist::parseRule(QString::fromLatin1(Data, static_cast<int>(Size)), b, r);
+ b.clear();
+ r.clear();
+ return 0;
+}
+#endif
+
+bool Hostlist::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);
- }
+ const auto line = from.readLine(512);
+ parseRule(line, blocked, redirected);
}
return true;
}