libs: kill the job immediately if the favicon is too big and remove it from the downloads queue

Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
This commit is contained in:
Ivailo Monev 2022-05-23 03:58:22 +03:00
parent dd4dfe1848
commit f437e42045
2 changed files with 3 additions and 14 deletions

View file

@ -107,7 +107,6 @@ struct FavIconsModulePrivate
QMap<KJob *, DownloadInfo> downloads;
KUrl::List failedDownloads;
KConfig *config;
QList<KIO::Job*> killJobs;
KIO::MetaData metaData;
QString faviconsDir;
QCache<QString,QString> faviconsCache;
@ -246,10 +245,11 @@ void FavIconsModule::slotData(KIO::Job *job, const QByteArray &data)
// Testcase (as of june 2008, at least): http://planet-soc.com/favicon.ico, 136K and strange format.
if (oldSize > 500000U) {
kWarning() << "Favicon too big, aborting download of" << tjob->url();
d->killJobs.append(job);
QTimer::singleShot(0, this, SLOT(slotKill()));
const KUrl iconURL = tjob->url();
d->failedDownloads.append(iconURL);
d->downloads.remove(job);
job->kill();
return;
}
download.iconData.resize(oldSize + data.size());
memcpy(download.iconData.data() + oldSize, data.data(), data.size());
@ -259,7 +259,6 @@ void FavIconsModule::slotResult(KJob *job)
{
KIO::TransferJob* tjob = static_cast<KIO::TransferJob*>(job);
FavIconsModulePrivate::DownloadInfo download = d->downloads[job];
d->killJobs.removeAll(tjob);
d->downloads.remove(job);
const KUrl iconURL = tjob->url();
QString iconName;
@ -303,13 +302,4 @@ void FavIconsModule::slotInfoMessage(KJob *job, const QString &msg)
emit infoMessage(static_cast<KIO::TransferJob *>( job )->url().url(), msg);
}
void FavIconsModule::slotKill()
{
// kDebug();
Q_FOREACH(KIO::Job* job, d->killJobs) {
job->kill();
}
d->killJobs.clear();
}
#include "moc_favicons.cpp"

View file

@ -119,7 +119,6 @@ private Q_SLOTS:
void slotData(KIO::Job *, const QByteArray &);
void slotResult(KJob *);
void slotInfoMessage(KJob *, const QString &);
void slotKill();
private:
struct FavIconsModulePrivate *d;