OSDN Git Service

kdirshare: fix possible crash in case of null KMimeType pointer
authorIvailo Monev <xakepa10@gmail.com>
Wed, 11 May 2022 01:03:49 +0000 (04:03 +0300)
committerIvailo Monev <xakepa10@gmail.com>
Wed, 11 May 2022 01:03:49 +0000 (04:03 +0300)
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
kdirshare/kded/kdirshareimpl.cpp

index 080248b..e1e371d 100644 (file)
@@ -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("<td>");
         if (!isdotdot) {
-            const QString filemime = KMimeType::findByPath(fullpath)->name();
+            const QString filemime = getFileMIME(fullpath);
             data.append(filemime.toAscii());
         }
         data.append("</td>");
@@ -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());