From b0a6628094c5ae5fe04152095aa49d07d8717c0c Mon Sep 17 00:00:00 2001 From: Ivailo Monev Date: Tue, 10 May 2022 01:58:01 +0300 Subject: [PATCH] kdirshare: send 500 if opening file fails Signed-off-by: Ivailo Monev --- kdirshare/kded/kdirshareimpl.cpp | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/kdirshare/kded/kdirshareimpl.cpp b/kdirshare/kded/kdirshareimpl.cpp index 2f15c1d3..00cd647c 100644 --- a/kdirshare/kded/kdirshareimpl.cpp +++ b/kdirshare/kded/kdirshareimpl.cpp @@ -177,6 +177,8 @@ QString KDirShareImpl::publishError() const return m_kdnssd.errorString(); } +// for reference: +// https://en.wikipedia.org/wiki/List_of_HTTP_status_codes void KDirShareImpl::respond(const QByteArray &url, QByteArray *outdata, ushort *outhttpstatus, KHTTPHeaders *outheaders) { // qDebug() << Q_FUNC_INFO << url; @@ -191,7 +193,7 @@ void KDirShareImpl::respond(const QByteArray &url, QByteArray *outdata, ushort * QBuffer iconbuffer; iconbuffer.open(QBuffer::ReadWrite); if (!iconpixmap.save(&iconbuffer, "PNG")) { - kWarning() << "could not save image"; + kWarning() << "Could not save image"; } const QByteArray data = iconbuffer.data(); @@ -205,13 +207,22 @@ void KDirShareImpl::respond(const QByteArray &url, QByteArray *outdata, ushort * outdata->append(data); } else if (pathinfo.isFile()) { QFile datafile(pathinfo.filePath()); - datafile.open(QFile::ReadOnly); - const QString filemime = KMimeType::findByPath(pathinfo.filePath())->name(); - const QByteArray data = datafile.readAll(); + if (!datafile.open(QFile::ReadOnly)) { + kWarning() << "Could not open" << pathinfo.filePath() << datafile.errorString(); - *outhttpstatus = 200; - outheaders->insert("Content-Type", QString::fromLatin1("%1; charset=UTF-8").arg(filemime).toAscii()); - outdata->append(data); + const QByteArray data("500 Could not open the file"); + + outdata->append(data); + *outhttpstatus = 500; + outheaders->insert("Content-Type", "text/html; charset=UTF-8"); + } else { + const QString filemime = KMimeType::findByPath(pathinfo.filePath())->name(); + const QByteArray data = datafile.readAll(); + + *outhttpstatus = 200; + outheaders->insert("Content-Type", QString::fromLatin1("%1; charset=UTF-8").arg(filemime).toAscii()); + outdata->append(data); + }; } else { const QByteArray data("404 Not Found");