[Solved] Crash PlayerbotAI::CastSpell(uint32)

Issue #11 resolved
David Magalhães created an issue
[New Thread 7869]
[New Thread 7937]
[New Thread 7936]
[New Thread 7935]
[New Thread 7934]
[New Thread 7932]
[New Thread 7931]
[New Thread 7834]
[New Thread 7832]
[New Thread 7831]
[New Thread 7830]
[New Thread 7829]
[New Thread 7828]
[New Thread 7826]
[New Thread 7825]
[Thread debugging using libthread_db enabled]
Core was generated by `/home/server/Core/Winterchill/bin/worldserver'.
Program terminated with signal 11, Segmentation fault.
#0  ToPlayer (this=0x2aaadcd87400, Target=0x0, spellId=<value optimized out>)
    at /home/server/Core/Sources/recent/FaceCore/src/server/game/Entities/Object/Object.h:309
309         Player* ToPlayer() { if (GetTypeId() == TYPEID_PLAYER) return reinterpret_cast<Player*>(this); else return NULL; }
#0  ToPlayer (this=0x2aaadcd87400, Target=0x0, spellId=<value optimized out>)
    at /home/server/Core/Sources/recent/FaceCore/src/server/game/Entities/Object/Object.h:309
No locals.
#1  PlayerbotAI::IsInRange (this=0x2aaadcd87400, Target=0x0, 
    spellId=<value optimized out>)
    at /home/server/Core/Sources/recent/FaceCore/src/server/game/AI/PlayerBots/PlayerbotAI.cpp:4768
        pSpellInfo = 0x2aaab5359000
#2  0x0000000000c753ca in PlayerbotAI::CastSpell (this=0x2aaadcd87400, spellId=23161)
    at /home/server/Core/Sources/recent/FaceCore/src/server/game/AI/PlayerBots/PlayerbotAI.cpp:4916
        pSpellInfo = 0x2aaab5359000
        pTarget = 0x0
        CastTime = <value optimized out>
        castTimeEntry = <value optimized out>
        target_type = 2
#3  0x0000000000c80eab in PlayerbotAI::UpdateAI (this=0x2aaadcd87400)
    at /home/server/Core/Sources/recent/FaceCore/src/server/game/AI/PlayerBots/PlayerbotAI.cpp:4639
        pSpellInfo = 0x2aaab66b6c00
        spellMount = 23161
        pSpell = 0x2aaadf319080
        currentTime = <value optimized out>
#4  0x00000000009500cc in Player::Update (this=0x2aaadf15b000, p_time=148)
    at /home/server/Core/Sources/recent/FaceCore/src/server/game/Entities/Player/Player.cpp:1885
        now = <value optimized out>
        pet = 0x509ef887
#5  0x0000000000b0ae02 in Map::Update (this=0x2aaabd006000, t_diff=148)
    at /home/server/Core/Sources/recent/FaceCore/src/server/game/Maps/Map.cpp:537
        player = 0x2aaadf15b000
        updater = {i_timeDiff = 148}
        grid_object_update = {i_visitor = @0x459e2fe0}
        world_object_update = {i_visitor = @0x459e2fe0}
#6  0x0000000000b18cc1 in MapUpdateRequest::call (this=0x2aaad328ac40)
    at /home/server/Core/Sources/recent/FaceCore/src/server/game/Maps/MapUpdater.cpp:54
No locals.
#7  0x0000000000e773e1 in DelayExecutor::svc (this=0x2aaaace1e840)
    at /home/server/Core/Sources/recent/FaceCore/src/server/shared/Threading/DelayExecutor.cpp:52
        rq = 0x2aaad328ac40
#8  0x00002b544de82c67 in ACE_Task_Base::svc_run (args=<value optimized out>)
    at ../../ace/Task.cpp:271
        t = 0x2aaaace1e840
        svc_status = <value optimized out>
#9  0x00002b544de8433b in ACE_Thread_Adapter::invoke_i (this=<value optimized out>)
    at ../../ace/Thread_Adapter.cpp:161
        hook = 0x0
        func = 0x2b544de82c30 <ACE_Task_Base::svc_run(void*)>
        arg = 0x2aaaace1e840
        cancel_flags = 4259842
        status = 0x30d3e
#10 0x00002b544de843c5 in ACE_Thread_Adapter::invoke (this=0x2aaac44f52e0)
    at ../../ace/Thread_Adapter.cpp:96
        exit_hook_instance = <value optimized out>
        exit_hook_maybe = {instance_ = 0x0}
        exit_hook_ptr = <value optimized out>
#11 0x00000035ef60677d in start_thread () from /lib64/libpthread.so.0
No symbol table info available.
#12 0x00000035eeed33ed in clone () from /lib64/libc.so.6
No symbol table info available.

Comments (7)

  1. trickerer repo owner

    Null pointer.

    PlayerbotAI.cpp approx. row 4820

        // set target
        Unit* pTarget = m_bot->GetSelection() ? sObjectAccessor->GetUnit(*m_bot, m_bot->GetSelection()) : m_bot;
    
        if (pSpellInfo->IsPositive())
        {
            if (pTarget && !m_bot->IsFriendlyTo(pTarget))
                pTarget = m_bot;
        }
    

    replace with

        // set target
        Unit* pTarget = m_bot->GetSelection() ? sObjectAccessor->GetUnit(*m_bot, m_bot->GetSelection()) : m_bot;
    
        if (!pTarget)
            pTarget = m_bot;
    
        if (pSpellInfo->IsPositive())
        {
            if (pTarget && !m_bot->IsFriendlyTo(pTarget))
                pTarget = m_bot;
        }
    

    , adding null pointer check. Should solve this one. Sorry, can't push right now

  2. Log in to comment