Ticket #10224: 0002-Dynamic-Cast-error-checking.patch

File 0002-Dynamic-Cast-error-checking.patch, 4.4 KB (added by Ezodev, 10 years ago)
  • src/apps/debugger/arch/x86/ArchitectureX86.cpp

    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,  
    272272    CpuState*& _previousCpuState)
    273273{
    274274    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    }
    277280   
    278281    uint32 framePointer = cpuState->IntRegisterValue(X86_REGISTER_EBP);
    279282    uint32 eip = cpuState->IntRegisterValue(X86_REGISTER_EIP);
    ArchitectureX86::UpdateStackFrameCpuState(const StackFrame* frame,  
    419422    // (calling) instruction.
    420423    CpuStateX86* cpuState = dynamic_cast<CpuStateX86*>(previousCpuState);
    421424    if (!cpuState)
    422         debugger("Dynamic cast failed");
    423        
     425        debugger("ArchitectureX86::CreateStackFrame(): \
     426                            Dynamic Cast failed");
     427
    424428    // get eip
    425429    uint32 eip = cpuState->IntRegisterValue(X86_REGISTER_EIP);
    426430    if (previousFunction == NULL || eip <= previousFunction->Address())
    ArchitectureX86::GetReturnAddressLocation(StackFrame* frame,  
    680684    } else {
    681685        ValuePieceLocation piece;
    682686        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        }
    685692       
    686693        piece.SetToMemory(state->IntRegisterValue(X86_REGISTER_EAX));
    687694        piece.SetSize(valueSize);
  • src/apps/debugger/user_interface/gui/util/SettingsMenu.cpp

    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:  
    176176    {
    177177        SettingsOption* selectedOption = settings->OptionValue(
    178178            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        }
    181184
    182185        for (int32 i = 0; BMenuItem* item = Submenu()->ItemAt(i); i++) {
    183186            OptionMenuItem* optionItem = dynamic_cast<OptionMenuItem*>(item);
  • src/apps/debugger/value/value_nodes/ArrayValueNode.cpp

    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,  
    315315
    316316        child = dynamic_cast<AbstractArrayValueNodeChild*>(
    317317            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        }
    320323    }
    321324
    322325    // resolve the element location
  • src/apps/debugger/value/value_nodes/BMessageValueNode.cpp

    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()  
    337337{
    338338    DataMember* member = NULL;
    339339    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   
    343346    for (int32 i = 0; i < messageType->CountDataMembers(); i++) {
    344347        member = messageType->DataMemberAt(i);
    345348        if (strcmp(member->Name(), "what") == 0) {