From 85e1e8a8ea5815ecb286210c18a9b3ce033e114d Mon Sep 17 00:00:00 2001 From: Ivailo Monev Date: Wed, 11 May 2022 04:03:49 +0300 Subject: [PATCH] kdirshare: fix possible crash in case of null KMimeType pointer Signed-off-by: Ivailo Monev --- kdirshare/kded/kdirshareimpl.cpp | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/kdirshare/kded/kdirshareimpl.cpp b/kdirshare/kded/kdirshareimpl.cpp index 080248be..e1e371d4 100644 --- a/kdirshare/kded/kdirshareimpl.cpp +++ b/kdirshare/kded/kdirshareimpl.cpp @@ -53,6 +53,18 @@ static QString getShareName(const QString &dirpath) return dirname; } +static QString getFileMIME(const QString &filepath) +{ + const KMimeType::Ptr kmimetypeptr = KMimeType::findByUrl( + KUrl(filepath), + mode_t(0), true + ); + if (!kmimetypeptr.isNull()) { + return kmimetypeptr->name(); + } + return QString::fromLatin1("application/octet-stream"); +} + static QByteArray contentForDirectory(const QString &path, const QString &basedir) { QByteArray data; @@ -100,7 +112,7 @@ static QByteArray contentForDirectory(const QString &path, const QString &basedi data.append(""); if (!isdotdot) { - const QString filemime = KMimeType::findByPath(fullpath)->name(); + const QString filemime = getFileMIME(fullpath); data.append(filemime.toAscii()); } data.append(""); @@ -218,16 +230,7 @@ void KDirShareImpl::respond(const QByteArray &url, QByteArray *outdata, *outhttpstatus = 500; outheaders->insert("Content-Type", "text/html; charset=UTF-8"); } else { - QString filemime; - const KMimeType::Ptr kmimetypeptr = KMimeType::findByUrl( - KUrl(pathinfo.filePath()), - mode_t(0), true - ); - if (!kmimetypeptr.isNull()) { - filemime = kmimetypeptr->name(); - } else { - filemime = QString::fromLatin1("application/octet-stream"); - } + const QString filemime = getFileMIME(pathinfo.filePath()); *outhttpstatus = 200; outheaders->insert("Content-Type", QString::fromLatin1("%1; charset=UTF-8").arg(filemime).toAscii()); outfilepath->append(pathinfo.filePath());