Ticket #10224: dynamic-casts-error-checking.patch

File dynamic-casts-error-checking.patch, 4.0 KB (added by Ezodev, 10 years ago)
  • src/apps/debugger/arch/x86/ArchitectureX86.cpp

    diff --git a/src/apps/debugger/arch/x86/ArchitectureX86.cpp b/src/apps/debugger/arch/x86/ArchitectureX86.cpp
    index b0bec17..e1c8488 100644
    a b ArchitectureX86::CreateStackFrame(Image* image, FunctionDebugInfo* function,  
    272272    CpuState*& _previousCpuState)
    273273{
    274274    CpuStateX86* cpuState = dynamic_cast<CpuStateX86*>(_cpuState);
    275 
     275    if (!cpuState) {
     276        fprintf(stderr, "ArchitectureX86::CreateStackFrame(): \
     277                            Dynamic Cast failed");
     278        return B_ERROR;
     279    }
     280   
    276281    uint32 framePointer = cpuState->IntRegisterValue(X86_REGISTER_EBP);
    277282    uint32 eip = cpuState->IntRegisterValue(X86_REGISTER_EIP);
    278283
    ArchitectureX86::UpdateStackFrameCpuState(const StackFrame* frame,  
    416421    // This is not a top frame, so we want to offset eip to the previous
    417422    // (calling) instruction.
    418423    CpuStateX86* cpuState = dynamic_cast<CpuStateX86*>(previousCpuState);
     424    if (!cpuState)
     425        debugger("ArchitectureX86::CreateStackFrame(): \
     426                            Dynamic Cast failed");
    419427
    420428    // get eip
    421429    uint32 eip = cpuState->IntRegisterValue(X86_REGISTER_EIP);
    ArchitectureX86::GetReturnAddressLocation(StackFrame* frame,  
    676684    } else {
    677685        ValuePieceLocation piece;
    678686        CpuStateX86* state = dynamic_cast<CpuStateX86*>(frame->GetCpuState());
     687        if (!state) {
     688            fprintf(stderr, "ArchitectureX86::GetReturnAddressLocation(): \
     689                                Dynamic Cast failed");
     690            return B_ERROR;
     691        }
     692       
    679693        piece.SetToMemory(state->IntRegisterValue(X86_REGISTER_EAX));
    680694        piece.SetSize(valueSize);
    681695        if (!location->AddPiece(piece))
  • 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 6165eef..730f2c8 100644
    a b  
    1616#include "MessageCodes.h"
    1717#include "SettingsDescription.h"
    1818
    19 
    2019// #pragma mark - SettingsMenu
    2120
    2221
    public:  
    176175    {
    177176        SettingsOption* selectedOption = settings->OptionValue(
    178177            dynamic_cast<OptionsSetting*>(GetSetting()));
     178        if (!selectedOption)
     179            debugger("SettingsMenuImpl::PrepareToShow(): \
     180                                Dynamic cast failed"); 
    179181
    180182        for (int32 i = 0; BMenuItem* item = Submenu()->ItemAt(i); i++) {
    181183            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 bc05323..381c10f 100644
    a b ArrayValueNodeChild::ResolveLocation(ValueLoader* valueLoader,  
    315315
    316316        child = dynamic_cast<AbstractArrayValueNodeChild*>(
    317317            child->ArrayParent()->NodeChild());
     318        if (!child) {
     319            fprintf(stderr, "ArrayValueNodeChild::ResolveLocation(): \
     320                                Dynamic cast failed"); 
     321            return B_ERROR;
     322        }
    318323    }
    319324
    320325    // 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 0da34fe..318e222 100644
    a b public:  
    7070        ValueLocation* parentLocation = fParent->Location();
    7171        ValueLocation* location;
    7272        CompoundType* type = dynamic_cast<CompoundType*>(fParent->GetType());
     73        if (!type)
     74            debugger("Dynamic cast failed");   
     75       
    7376        status_t error = B_OK;
    7477        if (fParent->fIsFlatMessage) {
    7578            location = new ValueLocation();
    BMessageValueNode::CreateChildren()  
    334337{
    335338    DataMember* member = NULL;
    336339    CompoundType* messageType = dynamic_cast<CompoundType*>(fType);
     340    if (!messageType) {
     341        fprintf(stderr, "BMessageValueNode::CreateChildren(): \
     342                            Dynamic cast failed");
     343        return B_ERROR;
     344    }
     345   
    337346    for (int32 i = 0; i < messageType->CountDataMembers(); i++) {
    338347        member = messageType->DataMemberAt(i);
    339348        if (strcmp(member->Name(), "what") == 0) {