From 12bc30cdf58a532771f3fba77b0eb10ce8ca9886 Mon Sep 17 00:00:00 2001 From: Alex Pankhurst Date: Tue, 10 Sep 2019 13:40:27 -0700 Subject: [PATCH] Check if attachment directories exist before open TESTED=`fx run-test crashpad_test -- --gtest_filter=Filesystem.Is*` Change-Id: If5940e56fbfd890e73d4403b530bc3e4a32e0365 Reviewed-on: https://chromium-review.googlesource.com/c/crashpad/crashpad/+/1796965 Commit-Queue: Francois Rousseau Reviewed-by: Joshua Peraza --- client/crash_report_database_generic.cc | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/client/crash_report_database_generic.cc b/client/crash_report_database_generic.cc index bbdb2444..aeaf2af4 100644 --- a/client/crash_report_database_generic.cc +++ b/client/crash_report_database_generic.cc @@ -173,8 +173,7 @@ off_t GetFileSize(const base::FilePath& filepath) { void AddAttachmentSize(const base::FilePath& attachments_dir, uint64_t* size) { // Early return if the attachment directory does not exist. - struct stat statbuf; - if (stat(attachments_dir.value().c_str(), &statbuf) != 0) { + if (!IsDirectory(attachments_dir, /*allow_symlinks=*/false)) { return; } DirectoryReader reader; @@ -334,6 +333,9 @@ void CrashReportDatabase::UploadReport::InitializeAttachments() { base::FilePath attachments_dir = static_cast(database_)->AttachmentsPath( uuid); + if (!IsDirectory(attachments_dir, /*allow_symlinks=*/false)) { + return; + } DirectoryReader reader; if (!reader.Open(attachments_dir)) { return; @@ -873,7 +875,6 @@ void CrashReportDatabaseGeneric::CleanOrphanedAttachments() { base::FilePath root_attachments_dir(base_dir_.Append(kAttachmentsDirectory)); DirectoryReader reader; if (!reader.Open(root_attachments_dir)) { - LOG(ERROR) << "no attachments dir"; return; } @@ -914,6 +915,9 @@ void CrashReportDatabaseGeneric::CleanOrphanedAttachments() { void CrashReportDatabaseGeneric::RemoveAttachmentsByUUID(const UUID& uuid) { base::FilePath attachments_dir = AttachmentsPath(uuid); + if (!IsDirectory(attachments_dir, /*allow_symlinks=*/false)) { + return; + } DirectoryReader reader; if (!reader.Open(attachments_dir)) { return;