| OLD | NEW |
| 1 // Copyright 2015 The Crashpad Authors. All rights reserved. | 1 // Copyright 2015 The Crashpad Authors. All rights reserved. |
| 2 // | 2 // |
| 3 // Licensed under the Apache License, Version 2.0 (the "License"); | 3 // Licensed under the Apache License, Version 2.0 (the "License"); |
| 4 // you may not use this file except in compliance with the License. | 4 // you may not use this file except in compliance with the License. |
| 5 // You may obtain a copy of the License at | 5 // You may obtain a copy of the License at |
| 6 // | 6 // |
| 7 // http://www.apache.org/licenses/LICENSE-2.0 | 7 // http://www.apache.org/licenses/LICENSE-2.0 |
| 8 // | 8 // |
| 9 // Unless required by applicable law or agreed to in writing, software | 9 // Unless required by applicable law or agreed to in writing, software |
| 10 // distributed under the License is distributed on an "AS IS" BASIS, | 10 // distributed under the License is distributed on an "AS IS" BASIS, |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 56 | 56 |
| 57 ProcessSnapshotMinidump process_snapshot; | 57 ProcessSnapshotMinidump process_snapshot; |
| 58 EXPECT_TRUE(process_snapshot.Initialize(&string_file)); | 58 EXPECT_TRUE(process_snapshot.Initialize(&string_file)); |
| 59 } | 59 } |
| 60 | 60 |
| 61 // Writes |string| to |writer| as a MinidumpUTF8String, and returns the file | 61 // Writes |string| to |writer| as a MinidumpUTF8String, and returns the file |
| 62 // offst of the beginning of the string. | 62 // offst of the beginning of the string. |
| 63 RVA WriteString(FileWriterInterface* writer, const std::string& string) { | 63 RVA WriteString(FileWriterInterface* writer, const std::string& string) { |
| 64 RVA rva = static_cast<RVA>(writer->SeekGet()); | 64 RVA rva = static_cast<RVA>(writer->SeekGet()); |
| 65 | 65 |
| 66 uint32_t string_size = string.size(); | 66 uint32_t string_size = static_cast<uint32_t>(string.size()); |
| 67 EXPECT_TRUE(writer->Write(&string_size, sizeof(string_size))); | 67 EXPECT_TRUE(writer->Write(&string_size, sizeof(string_size))); |
| 68 | 68 |
| 69 // Include the trailing NUL character. | 69 // Include the trailing NUL character. |
| 70 EXPECT_TRUE(writer->Write(string.c_str(), string.size() + 1)); | 70 EXPECT_TRUE(writer->Write(string.c_str(), string.size() + 1)); |
| 71 | 71 |
| 72 return rva; | 72 return rva; |
| 73 } | 73 } |
| 74 | 74 |
| 75 // Writes |dictionary| to |writer| as a MinidumpSimpleStringDictionary, and | 75 // Writes |dictionary| to |writer| as a MinidumpSimpleStringDictionary, and |
| 76 // populates |location| with a location descriptor identifying what was written. | 76 // populates |location| with a location descriptor identifying what was written. |
| 77 void WriteMinidumpSimpleStringDictionary( | 77 void WriteMinidumpSimpleStringDictionary( |
| 78 MINIDUMP_LOCATION_DESCRIPTOR* location, | 78 MINIDUMP_LOCATION_DESCRIPTOR* location, |
| 79 FileWriterInterface* writer, | 79 FileWriterInterface* writer, |
| 80 const std::map<std::string, std::string>& dictionary) { | 80 const std::map<std::string, std::string>& dictionary) { |
| 81 std::vector<MinidumpSimpleStringDictionaryEntry> entries; | 81 std::vector<MinidumpSimpleStringDictionaryEntry> entries; |
| 82 for (const auto& it : dictionary) { | 82 for (const auto& it : dictionary) { |
| 83 MinidumpSimpleStringDictionaryEntry entry; | 83 MinidumpSimpleStringDictionaryEntry entry; |
| 84 entry.key = WriteString(writer, it.first); | 84 entry.key = WriteString(writer, it.first); |
| 85 entry.value = WriteString(writer, it.second); | 85 entry.value = WriteString(writer, it.second); |
| 86 entries.push_back(entry); | 86 entries.push_back(entry); |
| 87 } | 87 } |
| 88 | 88 |
| 89 location->Rva = static_cast<RVA>(writer->SeekGet()); | 89 location->Rva = static_cast<RVA>(writer->SeekGet()); |
| 90 | 90 |
| 91 const uint32_t simple_string_dictionary_entries = entries.size(); | 91 const uint32_t simple_string_dictionary_entries = |
| 92 static_cast<uint32_t>(entries.size()); |
| 92 EXPECT_TRUE(writer->Write(&simple_string_dictionary_entries, | 93 EXPECT_TRUE(writer->Write(&simple_string_dictionary_entries, |
| 93 sizeof(simple_string_dictionary_entries))); | 94 sizeof(simple_string_dictionary_entries))); |
| 94 for (const MinidumpSimpleStringDictionaryEntry& entry : entries) { | 95 for (const MinidumpSimpleStringDictionaryEntry& entry : entries) { |
| 95 EXPECT_TRUE(writer->Write(&entry, sizeof(entry))); | 96 EXPECT_TRUE(writer->Write(&entry, sizeof(entry))); |
| 96 } | 97 } |
| 97 | 98 |
| 98 location->DataSize = | 99 location->DataSize = static_cast<uint32_t>( |
| 99 sizeof(simple_string_dictionary_entries) + | 100 sizeof(simple_string_dictionary_entries) + |
| 100 entries.size() * sizeof(MinidumpSimpleStringDictionaryEntry); | 101 entries.size() * sizeof(MinidumpSimpleStringDictionaryEntry)); |
| 101 } | 102 } |
| 102 | 103 |
| 103 // Writes |strings| to |writer| as a MinidumpRVAList referencing | 104 // Writes |strings| to |writer| as a MinidumpRVAList referencing |
| 104 // MinidumpUTF8String objects, and populates |location| with a location | 105 // MinidumpUTF8String objects, and populates |location| with a location |
| 105 // descriptor identifying what was written. | 106 // descriptor identifying what was written. |
| 106 void WriteMinidumpStringList(MINIDUMP_LOCATION_DESCRIPTOR* location, | 107 void WriteMinidumpStringList(MINIDUMP_LOCATION_DESCRIPTOR* location, |
| 107 FileWriterInterface* writer, | 108 FileWriterInterface* writer, |
| 108 const std::vector<std::string>& strings) { | 109 const std::vector<std::string>& strings) { |
| 109 std::vector<RVA> rvas; | 110 std::vector<RVA> rvas; |
| 110 for (const std::string& string : strings) { | 111 for (const std::string& string : strings) { |
| 111 rvas.push_back(WriteString(writer, string)); | 112 rvas.push_back(WriteString(writer, string)); |
| 112 } | 113 } |
| 113 | 114 |
| 114 location->Rva = static_cast<RVA>(writer->SeekGet()); | 115 location->Rva = static_cast<RVA>(writer->SeekGet()); |
| 115 | 116 |
| 116 const uint32_t string_list_entries = rvas.size(); | 117 const uint32_t string_list_entries = static_cast<uint32_t>(rvas.size()); |
| 117 EXPECT_TRUE(writer->Write(&string_list_entries, sizeof(string_list_entries))); | 118 EXPECT_TRUE(writer->Write(&string_list_entries, sizeof(string_list_entries))); |
| 118 for (RVA rva : rvas) { | 119 for (RVA rva : rvas) { |
| 119 EXPECT_TRUE(writer->Write(&rva, sizeof(rva))); | 120 EXPECT_TRUE(writer->Write(&rva, sizeof(rva))); |
| 120 } | 121 } |
| 121 | 122 |
| 122 location->DataSize = sizeof(string_list_entries) + rvas.size() * sizeof(RVA); | 123 location->DataSize = static_cast<uint32_t>(sizeof(string_list_entries) + |
| 124 rvas.size() * sizeof(RVA)); |
| 123 } | 125 } |
| 124 | 126 |
| 125 TEST(ProcessSnapshotMinidump, AnnotationsSimpleMap) { | 127 TEST(ProcessSnapshotMinidump, AnnotationsSimpleMap) { |
| 126 StringFile string_file; | 128 StringFile string_file; |
| 127 | 129 |
| 128 MINIDUMP_HEADER header = {}; | 130 MINIDUMP_HEADER header = {}; |
| 129 EXPECT_TRUE(string_file.Write(&header, sizeof(header))); | 131 EXPECT_TRUE(string_file.Write(&header, sizeof(header))); |
| 130 | 132 |
| 131 MinidumpCrashpadInfo crashpad_info = {}; | 133 MinidumpCrashpadInfo crashpad_info = {}; |
| 132 crashpad_info.version = MinidumpCrashpadInfo::kVersion; | 134 crashpad_info.version = MinidumpCrashpadInfo::kVersion; |
| (...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 276 annotations_simple_map = modules[2]->AnnotationsSimpleMap(); | 278 annotations_simple_map = modules[2]->AnnotationsSimpleMap(); |
| 277 EXPECT_EQ(dictionary_2, annotations_simple_map); | 279 EXPECT_EQ(dictionary_2, annotations_simple_map); |
| 278 | 280 |
| 279 annotations_vector = modules[2]->AnnotationsVector(); | 281 annotations_vector = modules[2]->AnnotationsVector(); |
| 280 EXPECT_EQ(list_annotations_2, annotations_vector); | 282 EXPECT_EQ(list_annotations_2, annotations_vector); |
| 281 } | 283 } |
| 282 | 284 |
| 283 } // namespace | 285 } // namespace |
| 284 } // namespace test | 286 } // namespace test |
| 285 } // namespace crashpad | 287 } // namespace crashpad |
| OLD | NEW |