/* * 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 #include inline void Hostlist::parseRule(const QString &line, QStringList &blocked, QHash &redirected) { if(line.isEmpty() || line.at(0) == '#') return; auto parts = line.trimmed().split(' '); if(parts.size() < 2) return; if(parts[0] == "0.0.0.0") { parts.pop_front(); blocked << parts; return; } for(int i = 1; i < parts.size(); ++i) { redirected.insert(parts[i], parts[0]); } } #ifdef FUZZER extern "C" int LLVMFuzzerTestOneInput(const char *Data, long long Size) { QStringList b; QHash r; Hostlist::parseRule(QString::fromLatin1(Data, static_cast(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); parseRule(line, blocked, redirected); } return true; }