From 3661e50f29ffe5f891ea62f93f6081b165455cb8 Mon Sep 17 00:00:00 2001 From: Michal Klocek <michal.klocek@qt.io> Date: Wed, 7 Mar 2018 18:36:25 +0100 Subject: [PATCH] Implement IsMostRecentDownloadItemAtFilePath call Implement IsMostRecentDownloadItemAtFilePath for download_manager_delegate_qt. This is required for CVE-2018-6033. Change-Id: I979b77042facf7d3acaef5eda7a6e842f715a1ef Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io> --- src/core/download_manager_delegate_qt.cpp | 20 ++++++++++++++++++++ src/core/download_manager_delegate_qt.h | 2 ++ 2 files changed, 22 insertions(+) diff --git a/src/core/download_manager_delegate_qt.cpp b/src/core/download_manager_delegate_qt.cpp index 40df9b3a8..487a831e4 100644 --- a/src/core/download_manager_delegate_qt.cpp +++ b/src/core/download_manager_delegate_qt.cpp @@ -293,6 +293,26 @@ void DownloadManagerDelegateQt::ChooseSavePath(content::WebContents *web_content m_weakPtrFactory.GetWeakPtr())); } +bool DownloadManagerDelegateQt::IsMostRecentDownloadItemAtFilePath(content::DownloadItem *download) +{ + content::BrowserContext *context = download->GetBrowserContext(); + std::vector<content::DownloadItem*> all_downloads; + + content::DownloadManager* manager = + content::BrowserContext::GetDownloadManager(context); + if (manager) + manager->GetAllDownloads(&all_downloads); + + for (const auto* item : all_downloads) { + if (item->GetGuid() == download->GetGuid() || + item->GetTargetFilePath() != download->GetTargetFilePath()) + continue; + if (item->GetState() == content::DownloadItem::IN_PROGRESS) + return false; + } + return true; +} + void DownloadManagerDelegateQt::savePackageDownloadCreated(content::DownloadItem *item) { OnDownloadUpdated(item); diff --git a/src/core/download_manager_delegate_qt.h b/src/core/download_manager_delegate_qt.h index df43211ed..7563d5d3b 100644 --- a/src/core/download_manager_delegate_qt.h +++ b/src/core/download_manager_delegate_qt.h @@ -81,6 +81,8 @@ public: const base::FilePath::StringType &default_extension, bool can_save_as_complete, const content::SavePackagePathPickedCallback &callback) override; + bool IsMostRecentDownloadItemAtFilePath(content::DownloadItem* download) override; + void cancelDownload(quint32 downloadId); void pauseDownload(quint32 downloadId); -- GitLab