Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(338)

Side by Side Diff: chrome/browser/safe_browsing/pe_image_reader_win_unittest.cc

Issue 1015363003: Move BinaryFeatureExtractor and PEImageReader to common. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@zip2
Patch Set: sync to position 321353 Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « chrome/browser/safe_browsing/pe_image_reader_win.cc ('k') | chrome/chrome.gyp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2014 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.
4
5 #include "base/files/file_path.h"
6 #include "base/files/memory_mapped_file.h"
7 #include "base/path_service.h"
8 #include "chrome/browser/safe_browsing/pe_image_reader_win.h"
9 #include "chrome/common/chrome_paths.h"
10 #include "testing/gtest/include/gtest/gtest.h"
11
12 struct TestData {
13 const char* filename;
14 safe_browsing::PeImageReader::WordSize word_size;
15 WORD machine_identifier;
16 WORD optional_header_size;
17 size_t number_of_sections;
18 size_t number_of_debug_entries;
19 };
20
21 // A test fixture parameterized on test data containing the name of a PE image
22 // to parse and the expected values to be read from it. The file is read from
23 // the src/chrome/test/data/safe_browsing directory.
24 class PeImageReaderTest : public testing::TestWithParam<const TestData*> {
25 protected:
26 PeImageReaderTest() : expected_data_(GetParam()) {}
27
28 virtual void SetUp() override {
29 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &data_file_path_));
30 data_file_path_ = data_file_path_.AppendASCII("safe_browsing");
31 data_file_path_ = data_file_path_.AppendASCII(expected_data_->filename);
32
33 ASSERT_TRUE(data_file_.Initialize(data_file_path_));
34
35 ASSERT_TRUE(image_reader_.Initialize(data_file_.data(),
36 data_file_.length()));
37 }
38
39 const TestData* expected_data_;
40 base::FilePath data_file_path_;
41 base::MemoryMappedFile data_file_;
42 safe_browsing::PeImageReader image_reader_;
43 };
44
45 TEST_P(PeImageReaderTest, GetWordSize) {
46 EXPECT_EQ(expected_data_->word_size, image_reader_.GetWordSize());
47 }
48
49 TEST_P(PeImageReaderTest, GetDosHeader) {
50 const IMAGE_DOS_HEADER* dos_header = image_reader_.GetDosHeader();
51 ASSERT_NE(reinterpret_cast<const IMAGE_DOS_HEADER*>(NULL), dos_header);
52 EXPECT_EQ(IMAGE_DOS_SIGNATURE, dos_header->e_magic);
53 }
54
55 TEST_P(PeImageReaderTest, GetCoffFileHeader) {
56 const IMAGE_FILE_HEADER* file_header = image_reader_.GetCoffFileHeader();
57 ASSERT_NE(reinterpret_cast<const IMAGE_FILE_HEADER*>(NULL), file_header);
58 EXPECT_EQ(expected_data_->machine_identifier, file_header->Machine);
59 EXPECT_EQ(expected_data_->optional_header_size,
60 file_header->SizeOfOptionalHeader);
61 }
62
63 TEST_P(PeImageReaderTest, GetOptionalHeaderData) {
64 size_t optional_header_size = 0;
65 const uint8_t* optional_header_data =
66 image_reader_.GetOptionalHeaderData(&optional_header_size);
67 ASSERT_NE(reinterpret_cast<const uint8_t*>(NULL), optional_header_data);
68 EXPECT_EQ(expected_data_->optional_header_size, optional_header_size);
69 }
70
71 TEST_P(PeImageReaderTest, GetNumberOfSections) {
72 EXPECT_EQ(expected_data_->number_of_sections,
73 image_reader_.GetNumberOfSections());
74 }
75
76 TEST_P(PeImageReaderTest, GetSectionHeaderAt) {
77 size_t number_of_sections = image_reader_.GetNumberOfSections();
78 for (size_t i = 0; i < number_of_sections; ++i) {
79 const IMAGE_SECTION_HEADER* section_header =
80 image_reader_.GetSectionHeaderAt(i);
81 ASSERT_NE(reinterpret_cast<const IMAGE_SECTION_HEADER*>(NULL),
82 section_header);
83 }
84 }
85
86 TEST_P(PeImageReaderTest, InitializeFailTruncatedFile) {
87 // Compute the size of all headers through the section headers.
88 const IMAGE_SECTION_HEADER* last_section_header =
89 image_reader_.GetSectionHeaderAt(image_reader_.GetNumberOfSections() - 1);
90 const uint8_t* headers_end =
91 reinterpret_cast<const uint8_t*>(last_section_header) +
92 sizeof(*last_section_header);
93 size_t header_size = headers_end - data_file_.data();
94 safe_browsing::PeImageReader short_reader;
95
96 // Initialize should succeed when all headers are present.
97 EXPECT_TRUE(short_reader.Initialize(data_file_.data(), header_size));
98
99 // But fail if anything is missing.
100 for (size_t i = 0; i < header_size; ++i) {
101 EXPECT_FALSE(short_reader.Initialize(data_file_.data(), i));
102 }
103 }
104
105 TEST_P(PeImageReaderTest, GetExportSection) {
106 size_t section_size = 0;
107 const uint8_t* export_section = image_reader_.GetExportSection(&section_size);
108 ASSERT_NE(reinterpret_cast<const uint8_t*>(NULL), export_section);
109 EXPECT_NE(0U, section_size);
110 }
111
112 TEST_P(PeImageReaderTest, GetNumberOfDebugEntries) {
113 EXPECT_EQ(expected_data_->number_of_debug_entries,
114 image_reader_.GetNumberOfDebugEntries());
115 }
116
117 TEST_P(PeImageReaderTest, GetDebugEntry) {
118 size_t number_of_debug_entries = image_reader_.GetNumberOfDebugEntries();
119 for (size_t i = 0; i < number_of_debug_entries; ++i) {
120 const uint8_t* raw_data = NULL;
121 size_t raw_data_size = 0;
122 const IMAGE_DEBUG_DIRECTORY* entry =
123 image_reader_.GetDebugEntry(i, &raw_data, &raw_data_size);
124 EXPECT_NE(reinterpret_cast<const IMAGE_DEBUG_DIRECTORY*>(NULL), entry);
125 EXPECT_NE(reinterpret_cast<const uint8_t*>(NULL), raw_data);
126 EXPECT_NE(0U, raw_data_size);
127 }
128 }
129
130 namespace {
131
132 const TestData kTestData[] = {
133 {
134 "module_with_exports_x86.dll",
135 safe_browsing::PeImageReader::WORD_SIZE_32,
136 IMAGE_FILE_MACHINE_I386,
137 sizeof(IMAGE_OPTIONAL_HEADER32),
138 4,
139 1,
140 }, {
141 "module_with_exports_x64.dll",
142 safe_browsing::PeImageReader::WORD_SIZE_64,
143 IMAGE_FILE_MACHINE_AMD64,
144 sizeof(IMAGE_OPTIONAL_HEADER64),
145 5,
146 1,
147 },
148 };
149
150 } // namespace
151
152 INSTANTIATE_TEST_CASE_P(WordSize32,
153 PeImageReaderTest,
154 testing::Values(&kTestData[0]));
155 INSTANTIATE_TEST_CASE_P(WordSize64,
156 PeImageReaderTest,
157 testing::Values(&kTestData[1]));
OLDNEW
« no previous file with comments | « chrome/browser/safe_browsing/pe_image_reader_win.cc ('k') | chrome/chrome.gyp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698