Fix crash after Launcher drag/drop (take 3 - no unit test)
[chromium-blink-merge.git] / chrome / common / safe_browsing / zip_analyzer.cc
blobd2ce62513eb8039a1c50e91d8a2faff4eb3176ce
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "chrome/common/safe_browsing/zip_analyzer.h"
7 #include "base/logging.h"
8 #include "chrome/common/safe_browsing/download_protection_util.h"
9 #include "third_party/zlib/google/zip_reader.h"
11 namespace safe_browsing {
12 namespace zip_analyzer {
14 void AnalyzeZipFile(base::File zip_file, Results* results) {
15 zip::ZipReader reader;
16 if (!reader.OpenFromPlatformFile(zip_file.GetPlatformFile())) {
17 DVLOG(1) << "Failed to open zip file";
18 return;
21 bool advanced = true;
22 for (; reader.HasMore(); advanced = reader.AdvanceToNextEntry()) {
23 if (!advanced) {
24 DVLOG(1) << "Could not advance to next entry, aborting zip scan.";
25 return;
27 if (!reader.OpenCurrentEntryInZip()) {
28 DVLOG(1) << "Failed to open current entry in zip file";
29 continue;
31 const base::FilePath& file = reader.current_entry_info()->file_path();
32 if (download_protection_util::IsBinaryFile(file)) {
33 // Don't consider an archived archive to be executable, but record
34 // a histogram.
35 if (download_protection_util::IsArchiveFile(file)) {
36 results->has_archive = true;
37 } else {
38 DVLOG(2) << "Downloaded a zipped executable: " << file.value();
39 results->has_executable = true;
40 break;
42 } else {
43 DVLOG(3) << "Ignoring non-binary file: " << file.value();
46 results->success = true;
49 } // namespace zip_analyzer
50 } // namespace safe_browsing