From 0d1ef7cd8886fa3c8336d0408e90cc921aa1aa31 Mon Sep 17 00:00:00 2001 From: Martin Rotter Date: Fri, 31 Jul 2020 12:11:30 +0200 Subject: [PATCH] Fix #256 - some files were not downloaded because their Content-Disposition header was badly parsed. --- src/librssguard/network-web/downloadmanager.cpp | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/src/librssguard/network-web/downloadmanager.cpp b/src/librssguard/network-web/downloadmanager.cpp index 0bdb04a0d..7d60c450b 100644 --- a/src/librssguard/network-web/downloadmanager.cpp +++ b/src/librssguard/network-web/downloadmanager.cpp @@ -135,17 +135,14 @@ QString DownloadItem::saveFileName(const QString& directory) const { QString path; if (m_reply->hasRawHeader("Content-Disposition")) { - const QString value = QLatin1String(m_reply->rawHeader("Content-Disposition")); - const int pos = value.indexOf(QL1S("filename=")); + QString value = QLatin1String(m_reply->rawHeader("Content-Disposition")); + QRegularExpression exp(".*filename=?\"([^\"]+)\"?"); + QRegularExpressionMatch match = exp.match(value); - if (pos != -1) { - QString name = value.mid(pos + 9); + if (match.isValid()) { + QString name = match.captured(1); - if (name.startsWith(QL1C('"')) && name.endsWith(QL1C('"'))) { - name = name.mid(1, name.size() - 2); - } - - path = name; + path = QUrl::fromPercentEncoding(name.toLocal8Bit()); } }