From 0ffa6b7c01826948909101d3a39194bf7be54c95 Mon Sep 17 00:00:00 2001
From: Ezo <ezo.dev@gmail.com>
Date: Wed, 20 Nov 2013 23:13:30 +0000
Subject: [PATCH 2/2] Dynamic Cast error checking
---
src/apps/debugger/arch/x86/ArchitectureX86.cpp | 19 +++++++++++++------
.../debugger/user_interface/gui/util/SettingsMenu.cpp | 7 +++++--
.../debugger/value/value_nodes/ArrayValueNode.cpp | 7 +++++--
.../debugger/value/value_nodes/BMessageValueNode.cpp | 9 ++++++---
4 files changed, 29 insertions(+), 13 deletions(-)
diff --git a/src/apps/debugger/arch/x86/ArchitectureX86.cpp b/src/apps/debugger/arch/x86/ArchitectureX86.cpp
index 92e44ab..e1c8488 100644
a
|
b
|
ArchitectureX86::CreateStackFrame(Image* image, FunctionDebugInfo* function,
|
272 | 272 | CpuState*& _previousCpuState) |
273 | 273 | { |
274 | 274 | CpuStateX86* cpuState = dynamic_cast<CpuStateX86*>(_cpuState); |
275 | | if (!cpuState) |
276 | | debugger("Dynamic cast failed"); |
| 275 | if (!cpuState) { |
| 276 | fprintf(stderr, "ArchitectureX86::CreateStackFrame(): \ |
| 277 | Dynamic Cast failed"); |
| 278 | return B_ERROR; |
| 279 | } |
277 | 280 | |
278 | 281 | uint32 framePointer = cpuState->IntRegisterValue(X86_REGISTER_EBP); |
279 | 282 | uint32 eip = cpuState->IntRegisterValue(X86_REGISTER_EIP); |
… |
… |
ArchitectureX86::UpdateStackFrameCpuState(const StackFrame* frame,
|
419 | 422 | // (calling) instruction. |
420 | 423 | CpuStateX86* cpuState = dynamic_cast<CpuStateX86*>(previousCpuState); |
421 | 424 | if (!cpuState) |
422 | | debugger("Dynamic cast failed"); |
423 | | |
| 425 | debugger("ArchitectureX86::CreateStackFrame(): \ |
| 426 | Dynamic Cast failed"); |
| 427 | |
424 | 428 | // get eip |
425 | 429 | uint32 eip = cpuState->IntRegisterValue(X86_REGISTER_EIP); |
426 | 430 | if (previousFunction == NULL || eip <= previousFunction->Address()) |
… |
… |
ArchitectureX86::GetReturnAddressLocation(StackFrame* frame,
|
680 | 684 | } else { |
681 | 685 | ValuePieceLocation piece; |
682 | 686 | CpuStateX86* state = dynamic_cast<CpuStateX86*>(frame->GetCpuState()); |
683 | | if (!state) |
684 | | debugger("Dynamic cast failed"); |
| 687 | if (!state) { |
| 688 | fprintf(stderr, "ArchitectureX86::GetReturnAddressLocation(): \ |
| 689 | Dynamic Cast failed"); |
| 690 | return B_ERROR; |
| 691 | } |
685 | 692 | |
686 | 693 | piece.SetToMemory(state->IntRegisterValue(X86_REGISTER_EAX)); |
687 | 694 | piece.SetSize(valueSize); |
diff --git a/src/apps/debugger/user_interface/gui/util/SettingsMenu.cpp b/src/apps/debugger/user_interface/gui/util/SettingsMenu.cpp
index 1c01a12..e64d567 100644
a
|
b
|
public:
|
176 | 176 | { |
177 | 177 | SettingsOption* selectedOption = settings->OptionValue( |
178 | 178 | dynamic_cast<OptionsSetting*>(GetSetting())); |
179 | | if (!selectedOption) |
180 | | debugger("Dynamic cast failed"); |
| 179 | if (!selectedOption) { |
| 180 | fprintf(stderr, "SettingsMenuImpl::PrepareToShow(): \ |
| 181 | Dynamic cast failed"); |
| 182 | return B_ERROR; |
| 183 | } |
181 | 184 | |
182 | 185 | for (int32 i = 0; BMenuItem* item = Submenu()->ItemAt(i); i++) { |
183 | 186 | OptionMenuItem* optionItem = dynamic_cast<OptionMenuItem*>(item); |
diff --git a/src/apps/debugger/value/value_nodes/ArrayValueNode.cpp b/src/apps/debugger/value/value_nodes/ArrayValueNode.cpp
index b0144da..381c10f 100644
a
|
b
|
ArrayValueNodeChild::ResolveLocation(ValueLoader* valueLoader,
|
315 | 315 | |
316 | 316 | child = dynamic_cast<AbstractArrayValueNodeChild*>( |
317 | 317 | child->ArrayParent()->NodeChild()); |
318 | | if (!child) |
319 | | debugger("Dynamic cast failed"); |
| 318 | if (!child) { |
| 319 | fprintf(stderr, "ArrayValueNodeChild::ResolveLocation(): \ |
| 320 | Dynamic cast failed"); |
| 321 | return B_ERROR; |
| 322 | } |
320 | 323 | } |
321 | 324 | |
322 | 325 | // resolve the element location |
diff --git a/src/apps/debugger/value/value_nodes/BMessageValueNode.cpp b/src/apps/debugger/value/value_nodes/BMessageValueNode.cpp
index e57a198..318e222 100644
a
|
b
|
BMessageValueNode::CreateChildren()
|
337 | 337 | { |
338 | 338 | DataMember* member = NULL; |
339 | 339 | CompoundType* messageType = dynamic_cast<CompoundType*>(fType); |
340 | | if (!messageType) |
341 | | debugger("Dynamic cast failed"); |
342 | | |
| 340 | if (!messageType) { |
| 341 | fprintf(stderr, "BMessageValueNode::CreateChildren(): \ |
| 342 | Dynamic cast failed"); |
| 343 | return B_ERROR; |
| 344 | } |
| 345 | |
343 | 346 | for (int32 i = 0; i < messageType->CountDataMembers(); i++) { |
344 | 347 | member = messageType->DataMemberAt(i); |
345 | 348 | if (strcmp(member->Name(), "what") == 0) { |