From 1fd21185614dcae0c7a6e5647ba56cff0120f563 Mon Sep 17 00:00:00 2001 Message-Id: <1fd21185614dcae0c7a6e5647ba56cff0120f563.1521386919.git.kevin.kofler@chello.at> From: Michal Klocek 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: I9f48dfa159d684f0fda894e68b81ff622aceaae2 Reviewed-by: Allan Sandfeld Jensen --- 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 40df9b3a..487a831e 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 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 df43211e..7563d5d3 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); -- 2.14.3