Processor crashes on some truncated minidumps after #222. r=ted.mielczarek

http://groups.google.com/group/google-breakpad-dev/browse_thread/thread/a451668b1ece259f


git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@254 4c0a9323-5329-0410-9bdc-e9ce6186880e
This commit is contained in:
mmentovai 2008-04-04 21:41:50 +00:00
parent 867df1c652
commit 61ea8bf0d5
2 changed files with 13 additions and 6 deletions

View file

@ -109,6 +109,8 @@ class MinidumpObject {
public:
virtual ~MinidumpObject() {}
bool valid() const { return valid_; }
protected:
explicit MinidumpObject(Minidump* minidump);

View file

@ -2279,15 +2279,20 @@ bool MinidumpModuleList::Read(u_int32_t expected_size) {
++module_index) {
MinidumpModule* module = &(*modules)[module_index];
if (!module->ReadAuxiliaryData()) {
BPLOG(INFO) << "MinidumpModuleList could not read module auxiliary "
"data for module " <<
module_index << "/" << module_count;
continue;
// ReadAuxiliaryData fails if any data that the module indicates should
// exist is missing, but we treat some such cases as valid anyway. See
// issue #222: if a debugging record is of a format that's too large to
// handle, it shouldn't render the entire dump invalid. Check module
// validity before giving up.
if (!module->ReadAuxiliaryData() && !module->valid()) {
BPLOG(ERROR) << "MinidumpModuleList could not read required module "
"auxiliary data for module " <<
module_index << "/" << module_count;
return false;
}
// It is safe to use module->code_file() after successfully calling
// module->ReadAuxiliaryData.
// module->ReadAuxiliaryData or noting that the module is valid.
u_int64_t base_address = module->base_address();
u_int64_t module_size = module->size();