server icon indicating copy to clipboard operation
server copied to clipboard

🐛 map server crash while calling canEquipItem()

Open CatsEyeXI opened this issue 9 months ago • 4 comments

I affirm:

  • [x] I understand that if I do not agree to the following points by completing the checkboxes my issue will be ignored.
  • [x] I have read and understood the Contributing Guide and the Code of Conduct.
  • [x] I have searched existing issues to see if the issue has already been opened, and I have checked the commit log to see if the issue has been resolved since my server was last updated.

OS / platform the server is running (if known)

Windows10

Branch affected by issue

base

Steps to reproduce

I've not been able to reproduce this reliably despite trying to track down the responsible player(s). Full dump available upon request. I looked through recently merged PR's and one that may be relevant is #5622

image

Expected behavior

Condition should be handled gracefully as to not result in a crash.

CatsEyeXI avatar May 12 '24 17:05 CatsEyeXI

I was able to recreate this by talking to a conquest NPC and attempting to purchase a scroll of instant warp. Specifically Arpevion, T.K. in Southern San d'Oria.

!!! CRASH !!!
Exception code: C0000005 (ACCESS_VIOLATION)
Fault address: 00007FF7F6180AF8 02:0000000000E7EAF8
Process Name: C:\Users\Ampitere\Downloads\LSB\server\xi_map.exe
Full crash report: C:\Users\Ampitere\Downloads\LSB\server\dmp\xi_map.exe_12-5_20-45-13.log
Memory dump: C:\Users\Ampitere\Downloads\LSB\server\dmp\xi_map.exe_12-5_20-45-13.dmp
Time of crash: 2024/05/12 20:45:14
Process Uptime: 86 seconds
Processor: AMD Ryzen 7 3800X 8-Core Processor
Number Of Threads: 16
OS: Windows 10 Professional (Version 10.0, Build 19045)
Process Memory Usage: 1951MiB / 16384MiB
Git Branch: base
Git Commit Subject: Merge pull request #4914 from CatsAndBoats/boost_counter
Git SHA: 1cbf850a51-dirty
Git Date: Wed May 8 18:35:27 2024
=====================================================
=== Backtrace ===
CZoneEntities::ZoneServer: NPC: Disjoined_One (17720021)
CZoneEntities::ZoneServer: NPC: Disjoined_One (17720022)
CZoneEntities::ZoneServer: NPC: Disjoined_One (17720023)
CZoneEntities::ZoneServer: NPC: Disjoined_One (17720024)
CZoneEntities::ZoneServer: NPC: blank (17720025)
CZoneEntities::ZoneServer: NPC: blank (17720026)
CZoneEntities::ZoneServer: NPC: Ephemeral_Moogle (17720027)
CZoneEntities::ZoneServer: NPC: Wolden-Bolden (17720028)
CZoneEntities::ZoneServer: NPC: Enigmatic_Footprints (17720029)
CZoneEntities::ZoneServer: NPC: Layer_Reserve (17720030)
CZoneEntities::ZoneServer: NPC: AMAN_Validator (17720031)
CZoneEntities::ZoneServer: NPC: AMAN_Liaison (17720032)
CZoneEntities::ZoneServer: NPC: RepairerMoogle (17720033)
CZoneEntities::ZoneServer: Char: Ampitere (1)
map::parse: Char: Ampitere (1): 0x05B
=====================================================
=== Call stack ===
Address           Frame             Function
00007FF7F6180AF8  0000005884B72850  CModifier::getModID+18 (C:\Users\Ampitere\Downloads\LSB\server\src\map\modifier.cpp, line 32)
00007FF7F56B9D1B  0000005884B729D0  CItemEquipment::getModifier+6B (C:\Users\Ampitere\Downloads\LSB\server\src\map\items\item_equipment.cpp, line 215)
00007FF7F56B9FE8  0000005884B72B10  CItemEquipment::isEquippableByRace+28 (C:\Users\Ampitere\Downloads\LSB\server\src\map\items\item_equipment.cpp, line 142)
00007FF7F5AC07DD  0000005884B758C0  CLuaBaseEntity::canEquipItem+80D (C:\Users\Ampitere\Downloads\LSB\server\src\map\lua\lua_baseentity.cpp, line 4564)
00007FF7F57BE581  0000005884B759D0  sol::member_function_wrapper<bool (__cdecl CLuaBaseEntity::*)(unsigned short,sol::basic_object<sol::basic_reference<0> > const &),bool,CLuaBaseEntity,unsigned short,sol::basic_object<sol::basic_reference<0> > const &>::call<bool (__cdecl CLuaBaseEntity::*&)(unsigned short,sol::basic_object<sol::basic_reference<0> > const &),unsigned short,sol::basic_object<sol::basic_reference<0> > >+51 (C:\Users\Ampitere\Downloads\LSB\server\ext\sol\include\sol\sol.hpp, line 17775)
00007FF7F5770993  0000005884B75AD0  sol::member_function_wrapper<bool (__cdecl CLuaBaseEntity::*)(unsigned short,sol::basic_object<sol::basic_reference<0> > const &),bool,CLuaBaseEntity,unsigned short,sol::basic_object<sol::basic_reference<0> > const &>::caller::operator()<bool (__cdecl CLuaBaseEntity::*&)(unsigned short,sol::basic_object<sol::basic_reference<0> > const &),unsigned short,sol::basic_object<sol::basic_reference<0> > >+43 (C:\Users\Ampitere\Downloads\LSB\server\ext\sol\include\sol\sol.hpp, line 17781)
00007FF7F589DB7D  0000005884B75BE0  sol::stack::stack_detail::eval<1,sol::argument_handler<sol::types<bool,unsigned short,sol::basic_object<sol::basic_reference<0> > const &> > &,sol::member_function_wrapper<bool (__cdecl CLuaBaseEntity::*)(unsigned short,sol::basic_object<sol::basic_reference<0> > const &),bool,CLuaBaseEntity,unsigned short,sol::basic_object<sol::basic_reference<0> > const &>::caller,bool (__cdecl CLuaBaseEntity::*&)(unsigned short,sol::basic_object<sol::basic_reference<0> > const &),CLuaBaseEntity &,unsigned short,sol::basic_object<sol::basic_reference<0> > >+4D (C:\Users\Ampitere\Downloads\LSB\server\ext\sol\include\sol\sol.hpp, line 16492)
00007FF7F589F8E4  0000005884B75E10  sol::stack::stack_detail::eval<1,sol::basic_object<sol::basic_reference<0> > const &,1,sol::argument_handler<sol::types<bool,unsigned short,sol::basic_object<sol::basic_reference<0> > const &> > &,sol::member_function_wrapper<bool (__cdecl CLuaBaseEntity::*)(unsigned short,sol::basic_object<sol::basic_reference<0> > const &),bool,CLuaBaseEntity,unsigned short,sol::basic_object<sol::basic_reference<0> > const &>::caller,bool (__cdecl CLuaBaseEntity::*&)(unsigned short,sol::basic_object<sol::basic_reference<0> > const &),CLuaBaseEntity &,unsigned short>+114 (C:\Users\Ampitere\Downloads\LSB\server\ext\sol\include\sol\sol.hpp, line 16501)
00007FF7F58B165F  0000005884B75FE0  sol::stack::stack_detail::eval<1,unsigned short,sol::basic_object<sol::basic_reference<0> > const &,0,1,sol::argument_handler<sol::types<bool,unsigned short,sol::basic_object<sol::basic_reference<0> > const &> > &,sol::member_function_wrapper<bool (__cdecl CLuaBaseEntity::*)(unsigned short,sol::basic_object<sol::basic_reference<0> > const &),bool,CLuaBaseEntity,unsigned short,sol::basic_object<sol::basic_reference<0> > const &>::caller,bool (__cdecl CLuaBaseEntity::*&)(unsigned short,sol::basic_object<sol::basic_reference<0> > const &),CLuaBaseEntity &>+EF (C:\Users\Ampitere\Downloads\LSB\server\ext\sol\include\sol\sol.hpp, line 16524)
00007FF7F5798049  0000005884B76150  sol::stack::stack_detail::call<1,0,1,bool,unsigned short,sol::basic_object<sol::basic_reference<0> > const &,sol::member_function_wrapper<bool (__cdecl CLuaBaseEntity::*)(unsigned short,sol::basic_object<sol::basic_reference<0> > const &),bool,CLuaBaseEntity,unsigned short,sol::basic_object<sol::basic_reference<0> > const &>::caller,bool (__cdecl CLuaBaseEntity::*&)(unsigned short,sol::basic_object<sol::basic_reference<0> > const &),CLuaBaseEntity &>+A9 (C:\Users\Ampitere\Downloads\LSB\server\ext\sol\include\sol\sol.hpp, line 16547)
00007FF7F57A4120  0000005884B76290  sol::stack::call<1,bool,unsigned short,sol::basic_object<sol::basic_reference<0> > const &,sol::member_function_wrapper<bool (__cdecl CLuaBaseEntity::*)(unsigned short,sol::basic_object<sol::basic_reference<0> > const &),bool,CLuaBaseEntity,unsigned short,sol::basic_object<sol::basic_reference<0> > const &>::caller,bool (__cdecl CLuaBaseEntity::*&)(unsigned short,sol::basic_object<sol::basic_reference<0> > const &),CLuaBaseEntity &>+70 (C:\Users\Ampitere\Downloads\LSB\server\ext\sol\include\sol\sol.hpp, line 16575)
00007FF7F57C864E  0000005884B763F0  sol::stack::call_into_lua<1,1,bool,unsigned short,sol::basic_object<sol::basic_reference<0> > const &,sol::member_function_wrapper<bool (__cdecl CLuaBaseEntity::*)(unsigned short,sol::basic_object<sol::basic_reference<0> > const &),bool,CLuaBaseEntity,unsigned short,sol::basic_object<sol::basic_reference<0> > const &>::caller,bool (__cdecl CLuaBaseEntity::*&)(unsigned short,sol::basic_object<sol::basic_reference<0> > const &),CLuaBaseEntity &>+7E (C:\Users\Ampitere\Downloads\LSB\server\ext\sol\include\sol\sol.hpp, line 16621)
00007FF7F57BE501  0000005884B76570  sol::call_detail::lua_call_wrapper<CLuaBaseEntity,bool (__cdecl CLuaBaseEntity::*)(unsigned short,sol::basic_object<sol::basic_reference<0> > const &),0,0,1,0,1,void>::call<bool (__cdecl CLuaBaseEntity::*&)(unsigned short,sol::basic_object<sol::basic_reference<0> > const &),CLuaBaseEntity &>+61 (C:\Users\Ampitere\Downloads\LSB\server\ext\sol\include\sol\sol.hpp, line 18636)
00007FF7F57BE442  0000005884B766C0  sol::call_detail::lua_call_wrapper<CLuaBaseEntity,bool (__cdecl CLuaBaseEntity::*)(unsigned short,sol::basic_object<sol::basic_reference<0> > const &),0,0,1,0,1,void>::call<bool (__cdecl CLuaBaseEntity::*&)(unsigned short,sol::basic_object<sol::basic_reference<0> > const &)>+A2 (C:\Users\Ampitere\Downloads\LSB\server\ext\sol\include\sol\sol.hpp, line 18636)
00007FF7F57CF974  0000005884B767E0  sol::call_detail::call_wrapped<CLuaBaseEntity,0,0,0,1,1,bool (__cdecl CLuaBaseEntity::*&)(unsigned short,sol::basic_object<sol::basic_reference<0> > const &)>+54 (C:\Users\Ampitere\Downloads\LSB\server\ext\sol\include\sol\sol.hpp, line 18944)
00007FF7F5B40D7E  0000005884B76920  sol::function_detail::upvalue_this_member_function<CLuaBaseEntity,bool (__cdecl CLuaBaseEntity::*)(unsigned short,sol::basic_object<sol::basic_reference<0> > const &)>::real_call+4E (C:\Users\Ampitere\Downloads\LSB\server\ext\sol\include\sol\sol.hpp, line 19363)
00007FF7F54B0813  0000005884B76A30  sol::detail::lua_cfunction_trampoline+33 (C:\Users\Ampitere\Downloads\LSB\server\ext\sol\include\sol\sol.hpp, line 8822)
00007FF7F5995BD6  0000005884B76B30  sol::detail::static_trampoline<&sol::function_detail::upvalue_this_member_function<CLuaBaseEntity,bool (__cdecl CLuaBaseEntity::*)(unsigned short,sol::basic_object<sol::basic_reference<0> > const &)>::real_call>+26 (C:\Users\Ampitere\Downloads\LSB\server\ext\sol\include\sol\sol.hpp, line 8827)
00007FF7F59FAA8F  0000005884B76C30  sol::detail::typed_static_trampoline<int (__cdecl*)(lua_State *),&sol::function_detail::upvalue_this_member_function<CLuaBaseEntity,bool (__cdecl CLuaBaseEntity::*)(unsigned short,sol::basic_object<sol::basic_reference<0> > const &)>::real_call>+1F (C:\Users\Ampitere\Downloads\LSB\server\ext\sol\include\sol\sol.hpp, line 8894)
00007FF7F57A86CF  0000005884B76D50  sol::function_detail::upvalue_this_member_function<CLuaBaseEntity,bool (__cdecl CLuaBaseEntity::*)(unsigned short,sol::basic_object<sol::basic_reference<0> > const &)>::call<0,0>+1F (C:\Users\Ampitere\Downloads\LSB\server\ext\sol\include\sol\sol.hpp, line 19378)
00007FFE5D1C2CB0  0000005884B76DA0  0001:0000000000001CB0 C:\Users\Ampitere\Downloads\LSB\server\libluajit_64.dll ()
00007FFE5D1C8B6A  0000005884B76DD0  lua_pcall+AA ()
00007FF7F544F7D5  0000005884B76EE0  sol::basic_protected_function<sol::stack_reference,1,sol::basic_reference<0> >::luacall<1>+65 (C:\Users\Ampitere\Downloads\LSB\server\ext\sol\include\sol\sol.hpp, line 21089)
00007FF7F544EECF  0000005884B770F0  sol::basic_protected_function<sol::stack_reference,1,sol::basic_reference<0> >::invoke<1>+EF (C:\Users\Ampitere\Downloads\LSB\server\ext\sol\include\sol\sol.hpp, line 21119)
00007FF7F5D96592  0000005884B77340  sol::basic_protected_function<sol::stack_reference,1,sol::basic_reference<0> >::call<,CLuaBaseEntity,unsigned short &,unsigned int &,std::optional<CLuaBaseEntity> &,sol::basic_protected_function<sol::basic_reference<0>,0,sol::basic_reference<0> > &>+152 (C:\Users\Ampitere\Downloads\LSB\server\ext\sol\include\sol\sol.hpp, line 21027)
00007FF7F5D96815  0000005884B77500  sol::table_proxy<sol::basic_table_core<1,sol::basic_reference<0> > &,std::tuple<char const (&)[18],char const (&)[14]> >::call<,CLuaBaseEntity,unsigned short &,unsigned int &,std::optional<CLuaBaseEntity> &,sol::basic_protected_function<sol::basic_reference<0>,0,sol::basic_reference<0> > &>+C5 (C:\Users\Ampitere\Downloads\LSB\server\ext\sol\include\sol\sol.hpp, line 24897)
00007FF7F5D6E4D1  0000005884B77640  sol::table_proxy<sol::basic_table_core<1,sol::basic_reference<0> > &,std::tuple<char const (&)[18],char const (&)[14]> >::operator()<CLuaBaseEntity,unsigned short &,unsigned int &,std::optional<CLuaBaseEntity> &,sol::basic_protected_function<sol::basic_reference<0>,0,sol::basic_reference<0> > &>+71 (C:\Users\Ampitere\Downloads\LSB\server\ext\sol\include\sol\sol.hpp, line 24902)
00007FF7F5E851AC  0000005884B78BF0  luautils::OnEventUpdate+19C (C:\Users\Ampitere\Downloads\LSB\server\src\map\lua\luautils.cpp, line 2124)
00007FF7F620062E  0000005884B78D90  SmallPacket0x05B+12E (C:\Users\Ampitere\Downloads\LSB\server\src\map\packet_system.cpp, line 3799)
00007FF7F615285E  0000005884B7DE20  parse+F3E (C:\Users\Ampitere\Downloads\LSB\server\src\map\map.cpp, line 802)
00007FF7F614D5FE  0000005884B7F350  do_sockets+4DE (C:\Users\Ampitere\Downloads\LSB\server\src\map\map.cpp, line 577)
00007FF7F5477435  0000005884B7FD00  main+285 (C:\Users\Ampitere\Downloads\LSB\server\src\common\kernel.cpp, line 274)
00007FF7F63CEB39  0000005884B7FD50  invoke_main+39 (D:\a\_work\1\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl, li`

ampitere avatar May 13 '24 03:05 ampitere

Does not always happen when buying from the conquest NPC but only sometimes, seems to occur more often after zoning.

ampitere avatar May 13 '24 04:05 ampitere

what gear are you wearing when the crash happens

WinterSolstice8 avatar May 13 '24 05:05 WinterSolstice8

what gear are you wearing when the crash happens

None, this seems to be caused by if not player:canEquipItem(stock.item, false) then in the conquest lua and since it's sending non-equipment items into CLuaBaseEntity::canEquipItem it attempts to pull modifiers that don't exist. I just found a fix that seems sane: https://github.com/LandSandBoat/server/pull/5711

ampitere avatar May 13 '24 05:05 ampitere

what gear are you wearing when the crash happens

None, this seems to be caused by if not player:canEquipItem(stock.item, false) then in the conquest lua and since it's sending non-equipment items into CLuaBaseEntity::canEquipItem it attempts to pull modifiers that don't exist. I just found a fix that seems sane: #5711

thanks for the fix

CatsEyeXI avatar May 14 '24 16:05 CatsEyeXI