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

Unified Diff: snapshot/mac/mach_o_image_annotations_reader.cc

Issue 1277513003: Recognize crashreporter_annotations_t version 5 found on OS X 10.11 (Closed) Base URL: https://chromium.googlesource.com/crashpad/crashpad@master
Patch Set: ExpectedSizeForVersion(), ReadIntoVersioned() Created 5 years, 4 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | snapshot/mac/mach_o_image_annotations_reader_test.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: snapshot/mac/mach_o_image_annotations_reader.cc
diff --git a/snapshot/mac/mach_o_image_annotations_reader.cc b/snapshot/mac/mach_o_image_annotations_reader.cc
index 6c6831bdaea9b9616e4dca155e77f3e4fb37c1ab..1e2b74046ffc73820e655e67bd7b46664393784a 100644
--- a/snapshot/mac/mach_o_image_annotations_reader.cc
+++ b/snapshot/mac/mach_o_image_annotations_reader.cc
@@ -67,31 +67,34 @@ void MachOImageAnnotationsReader::ReadCrashReporterClientAnnotations(
}
process_types::crashreporter_annotations_t crash_info;
- if (crash_info_section->size < crash_info.ExpectedSize(process_reader_)) {
- LOG(WARNING) << "small crash info section size " << crash_info_section->size
- << " in " << name_;
- return;
- }
-
if (!crash_info.Read(process_reader_, crash_info_address)) {
LOG(WARNING) << "could not read crash info from " << name_;
return;
}
- if (crash_info.version != 4) {
+ if (crash_info.version != 4 && crash_info.version != 5) {
LOG(WARNING) << "unexpected crash info version " << crash_info.version
<< " in " << name_;
return;
}
+ size_t expected_size =
+ process_types::crashreporter_annotations_t::ExpectedSizeForVersion(
+ process_reader_, crash_info.version);
+ if (crash_info_section->size < expected_size) {
+ LOG(WARNING) << "small crash info section size " << crash_info_section->size
+ << " < " << expected_size << " for version "
+ << crash_info.version << " in " << name_;
+ return;
+ }
+
// This number was totally made up out of nowhere, but it seems prudent to
// enforce some limit.
const size_t kMaxMessageSize = 1024;
if (crash_info.message) {
std::string message;
- if (process_reader_->Memory()->
- ReadCStringSizeLimited(
- crash_info.message, kMaxMessageSize, &message)) {
+ if (process_reader_->Memory()->ReadCStringSizeLimited(
+ crash_info.message, kMaxMessageSize, &message)) {
vector_annotations->push_back(message);
} else {
LOG(WARNING) << "could not read crash message in " << name_;
@@ -100,9 +103,8 @@ void MachOImageAnnotationsReader::ReadCrashReporterClientAnnotations(
if (crash_info.message2) {
std::string message;
- if (process_reader_->Memory()->
- ReadCStringSizeLimited(
- crash_info.message2, kMaxMessageSize, &message)) {
+ if (process_reader_->Memory()->ReadCStringSizeLimited(
+ crash_info.message2, kMaxMessageSize, &message)) {
vector_annotations->push_back(message);
} else {
LOG(WARNING) << "could not read crash message 2 in " << name_;
@@ -127,8 +129,8 @@ void MachOImageAnnotationsReader::ReadDyldErrorStringAnnotation(
std::string message;
// 1024 here is distinct from kMaxMessageSize above, because it refers to a
// precisely-sized buffer inside dyld.
- if (process_reader_->Memory()->
- ReadCStringSizeLimited(error_string_address, 1024, &message)) {
+ if (process_reader_->Memory()->ReadCStringSizeLimited(
+ error_string_address, 1024, &message)) {
if (!message.empty()) {
vector_annotations->push_back(message);
}
@@ -150,10 +152,10 @@ void MachOImageAnnotationsReader::ReadCrashpadSimpleAnnotations(
std::vector<SimpleStringDictionary::Entry>
simple_annotations(SimpleStringDictionary::num_entries);
- if (!process_reader_->Memory()
- ->Read(crashpad_info.simple_annotations,
- simple_annotations.size() * sizeof(simple_annotations[0]),
- &simple_annotations[0])) {
+ if (!process_reader_->Memory()->Read(
+ crashpad_info.simple_annotations,
+ simple_annotations.size() * sizeof(simple_annotations[0]),
+ &simple_annotations[0])) {
LOG(WARNING) << "could not read simple annotations from " << name_;
return;
}
« no previous file with comments | « no previous file | snapshot/mac/mach_o_image_annotations_reader_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698