server
server copied to clipboard
🐛 map server crash while calling canEquipItem()
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
Expected behavior
Condition should be handled gracefully as to not result in a crash.
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`
Does not always happen when buying from the conquest NPC but only sometimes, seems to occur more often after zoning.
what gear are you wearing when the crash happens
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
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 intoCLuaBaseEntity::canEquipItem
it attempts to pull modifiers that don't exist. I just found a fix that seems sane: #5711
thanks for the fix