aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRene Gollent <anevilyak@gmail.com>2012-07-14 12:09:11 -0400
committerRene Gollent <anevilyak@gmail.com>2012-07-14 12:09:11 -0400
commit6faa3c97662c81aaea1bfa5b6803bb33d733f6af (patch)
tree79d965a1f75b5892e2f42a6a437dff71847af689
parentc163f973e6a96a2c37d70cc1992f2bb027f9ab81 (diff)
- If we're asked to generate an entry for a tag we don't recognize, return an error so don't then attempt to add a null/invalid entry into the compilation unit's entry list and later crash dereferencing it.
-rw-r--r--src/apps/debugger/dwarf/DebugInfoEntries.cpp1
-rw-r--r--src/apps/debugger/dwarf/DwarfFile.cpp6
2 files changed, 6 insertions, 1 deletions
diff --git a/src/apps/debugger/dwarf/DebugInfoEntries.cpp b/src/apps/debugger/dwarf/DebugInfoEntries.cpp
index 976684090c..9c2ecf47a9 100644
--- a/src/apps/debugger/dwarf/DebugInfoEntries.cpp
+++ b/src/apps/debugger/dwarf/DebugInfoEntries.cpp
@@ -2697,6 +2697,7 @@ DebugInfoEntryFactory::CreateDebugInfoEntry(uint16 tag, DebugInfoEntry*& _entry)
entry = new(std::nothrow) DIESharedType;
break;
default:
+ return B_ENTRY_NOT_FOUND;
break;
}
diff --git a/src/apps/debugger/dwarf/DwarfFile.cpp b/src/apps/debugger/dwarf/DwarfFile.cpp
index f07f10ae2a..f95d18ea4a 100644
--- a/src/apps/debugger/dwarf/DwarfFile.cpp
+++ b/src/apps/debugger/dwarf/DwarfFile.cpp
@@ -825,8 +825,12 @@ DwarfFile::_ParseDebugInfoEntry(DataReader& dataReader,
DebugInfoEntry* entry;
status_t error = fDebugInfoFactory.CreateDebugInfoEntry(
abbreviationEntry.Tag(), entry);
- if (error != B_OK)
+ if (error != B_OK) {
+ WARNING("Failed to generate entry for tag %lu, code %lu\n",
+ abbreviationEntry.Tag(), code);
return error;
+ }
+
ObjectDeleter<DebugInfoEntry> entryDeleter(entry);
TRACE_DIE("%*sentry %p at %lld: %lu, tag: %s (%lu), children: %d\n",