Deleting last save game for character leads to UB

Happens on 5f92d520:

Menu script to reproduce with example suite:

local menu = require('openmw.menu')

local state = 'init'

return {
    engineHandlers = {
        onFrame = function()
            if state == 'init' then
                menu.newGame()
                state = 'saveGame'
                return
            end
            if state == 'saveGame' then
                state = 'done'
                menu.saveGame('delete_game')
                menu.deleteGame(' - 1', 'delete_game.omwsave')
                menu.quit()
                return
            end
        end,
    },
}

openmw.cfg

openmw.log

Integration test failure: https://gitlab.com/elsid/openmw/-/jobs/9348851461.

Address sanitizer report
==29165==ERROR: AddressSanitizer: heap-use-after-free on address 0x5070001905c8 at pc 0x6256befab4e5 bp 0x7ffeba85af50 sp 0x7ffeba85af40
READ of size 8 at 0x5070001905c8 thread T0
    #0 0x6256befab4e4 in __gnu_cxx::__normal_iterator<MWState::Slot const*, std::vector<MWState::Slot, std::allocator<MWState::Slot> > >::__normal_iterator(MWState::Slot const* const&) /usr/include/c++/14.2.1/bits/stl_iterator.h:1068
    #1 0x6256befab4e4 in std::vector<MWState::Slot, std::allocator<MWState::Slot> >::begin() const /usr/include/c++/14.2.1/bits/stl_vector.h:884
    #2 0x6256befab4e4 in std::vector<MWState::Slot, std::allocator<MWState::Slot> >::rend() const /usr/include/c++/14.2.1/bits/stl_vector.h:944
    #3 0x6256befab4e4 in MWState::Character::end() const /home/elsid/dev/openmw/apps/openmw/mwstate/character.cpp:178
    #4 0x6256bef7b4ec in MWState::StateManager::deleteGame(MWState::Character const*, MWState::Slot const*) /home/elsid/dev/openmw/apps/openmw/mwstate/statemanagerimp.cpp:712
    #5 0x6256bc049341 in operator() /home/elsid/dev/openmw/apps/openmw/mwlua/menuscripts.cpp:61
    #6 0x6256bc049341 in _FUN /home/elsid/dev/openmw/apps/openmw/mwlua/menuscripts.cpp:62
    #7 0x6256bc05b95c in decltype(auto) sol::wrapper<void (*)(std::basic_string_view<char, std::char_traits<char> >, std::basic_string_view<char, std::char_traits<char> >), void>::call<std::basic_string_view<char, std::char_traits<char> >, std::basic_string_view<char, std::char_traits<char> > >(void (*&)(std::basic_string_view<char, std::char_traits<char> >, std::basic_string_view<char, std::char_traits<char> >), std::basic_string_view<char, std::char_traits<char> >&&, std::basic_string_view<char, std::char_traits<char> >&&) /home/elsid/dev/openmw/extern/sol3/sol/wrapper.hpp:70
    #8 0x6256bc05b95c in decltype(auto) sol::wrapper<void (*)(std::basic_string_view<char, std::char_traits<char> >, std::basic_string_view<char, std::char_traits<char> >), void>::caller::operator()<std::basic_string_view<char, std::char_traits<char> >, std::basic_string_view<char, std::char_traits<char> > >(void (*&)(std::basic_string_view<char, std::char_traits<char> >, std::basic_string_view<char, std::char_traits<char> >), std::basic_string_view<char, std::char_traits<char> >&&, std::basic_string_view<char, std::char_traits<char> >&&) const /home/elsid/dev/openmw/extern/sol3/sol/wrapper.hpp:76
    #9 0x6256bc05b95c in eval<true, sol::argument_handler<sol::types<void, std::basic_string_view<char, std::char_traits<char> >, std::basic_string_view<char, std::char_traits<char> > > >&, sol::wrapper<void (*)(std::basic_string_view<char>, std::basic_string_view<char>), void>::caller, void (*&)(std::basic_string_view<char, std::char_traits<char> >, std::basic_string_view<char, std::char_traits<char> >), std::basic_string_view<char, std::char_traits<char> >, std::basic_string_view<char, std::char_traits<char> > > /home/elsid/dev/openmw/extern/sol3/sol/stack.hpp:146
    #10 0x6256bc05b95c in eval<true, std::basic_string_view<char>, 1, sol::argument_handler<sol::types<void, std::basic_string_view<char, std::char_traits<char> >, std::basic_string_view<char, std::char_traits<char> > > >&, sol::wrapper<void (*)(std::basic_string_view<char>, std::basic_string_view<char>), void>::caller, void (*&)(std::basic_string_view<char, std::char_traits<char> >, std::basic_string_view<char, std::char_traits<char> >), std::basic_string_view<char, std::char_traits<char> > > /home/elsid/dev/openmw/extern/sol3/sol/stack.hpp:169
    #11 0x6256bc05b95c in eval<true, std::basic_string_view<char>, std::basic_string_view<char, std::char_traits<char> >, 0, 1, sol::argument_handler<sol::types<void, std::basic_string_view<char, std::char_traits<char> >, std::basic_string_view<char, std::char_traits<char> > > >&, sol::wrapper<void (*)(std::basic_string_view<char>, std::basic_string_view<char>), void>::caller, void (*&)(std::basic_string_view<char, std::char_traits<char> >, std::basic_string_view<char, std::char_traits<char> >)> /home/elsid/dev/openmw/extern/sol3/sol/stack.hpp:169
    #12 0x6256bc05b95c in decltype(auto) sol::stack::stack_detail::call<true, 0ul, 1ul, void, std::basic_string_view<char, std::char_traits<char> >, std::basic_string_view<char, std::char_traits<char> >, sol::wrapper<void (*)(std::basic_string_view<char, std::char_traits<char> >, std::basic_string_view<char, std::char_traits<char> >), void>::caller, void (*&)(std::basic_string_view<char, std::char_traits<char> >, std::basic_string_view<char, std::char_traits<char> >)>(sol::types<void>, sol::types<std::basic_string_view<char, std::char_traits<char> >, std::basic_string_view<char, std::char_traits<char> > >, std::integer_sequence<unsigned long, 0ul, 1ul>, lua_State*, int, sol::wrapper<void (*)(std::basic_string_view<char, std::char_traits<char> >, std::basic_string_view<char, std::char_traits<char> >), void>::caller&&, void (*&)(std::basic_string_view<char, std::char_traits<char> >, std::basic_string_view<char, std::char_traits<char> >)) /home/elsid/dev/openmw/extern/sol3/sol/stack.hpp:195
    #13 0x6256bc05b95c in decltype(auto) sol::stack::call<true, void, std::basic_string_view<char, std::char_traits<char> >, std::basic_string_view<char, std::char_traits<char> >, sol::wrapper<void (*)(std::basic_string_view<char, std::char_traits<char> >, std::basic_string_view<char, std::char_traits<char> >), void>::caller, void (*&)(std::basic_string_view<char, std::char_traits<char> >, std::basic_string_view<char, std::char_traits<char> >)>(sol::types<void>, sol::types<std::basic_string_view<char, std::char_traits<char> >, std::basic_string_view<char, std::char_traits<char> > >, lua_State*, int, sol::wrapper<void (*)(std::basic_string_view<char, std::char_traits<char> >, std::basic_string_view<char, std::char_traits<char> >), void>::caller&&, void (*&)(std::basic_string_view<char, std::char_traits<char> >, std::basic_string_view<char, std::char_traits<char> >)) /home/elsid/dev/openmw/extern/sol3/sol/stack.hpp:215
    #14 0x6256bc05b95c in int sol::stack::call_into_lua<true, true, void, , std::basic_string_view<char, std::char_traits<char> >, std::basic_string_view<char, std::char_traits<char> >, sol::wrapper<void (*)(std::basic_string_view<char, std::char_traits<char> >, std::basic_string_view<char, std::char_traits<char> >), void>::caller, void (*&)(std::basic_string_view<char, std::char_traits<char> >, std::basic_string_view<char, std::char_traits<char> >)>(sol::types<void>, sol::types<std::basic_string_view<char, std::char_traits<char> >, std::basic_string_view<char, std::char_traits<char> > >, lua_State*, int, sol::wrapper<void (*)(std::basic_string_view<char, std::char_traits<char> >, std::basic_string_view<char, std::char_traits<char> >), void>::caller&&, void (*&)(std::basic_string_view<char, std::char_traits<char> >, std::basic_string_view<char, std::char_traits<char> >)) /home/elsid/dev/openmw/extern/sol3/sol/stack.hpp:257
    #15 0x6256bc05b95c in int sol::call_detail::agnostic_lua_call_wrapper<void (*)(std::basic_string_view<char, std::char_traits<char> >, std::basic_string_view<char, std::char_traits<char> >), true, false, true, 0, true, void>::call<void (*&)(std::basic_string_view<char, std::char_traits<char> >, std::basic_string_view<char, std::char_traits<char> >)>(lua_State*, void (*&)(std::basic_string_view<char, std::char_traits<char> >, std::basic_string_view<char, std::char_traits<char> >)) /home/elsid/dev/openmw/extern/sol3/sol/call.hpp:378
    #16 0x6256bc05b95c in int sol::call_detail::lua_call_wrapper<void, void (*)(std::basic_string_view<char, std::char_traits<char> >, std::basic_string_view<char, std::char_traits<char> >), true, false, true, 0, true, void>::call<void (*&)(std::basic_string_view<char, std::char_traits<char> >, std::basic_string_view<char, std::char_traits<char> >)>(lua_State*, void (*&)(std::basic_string_view<char, std::char_traits<char> >, std::basic_string_view<char, std::char_traits<char> >)) /home/elsid/dev/openmw/extern/sol3/sol/call.hpp:599
    #17 0x6256bc05b95c in int sol::call_detail::call_wrapped<void, true, false, 0, true, true, void (*&)(std::basic_string_view<char, std::char_traits<char> >, std::basic_string_view<char, std::char_traits<char> >)>(lua_State*, void (*&)(std::basic_string_view<char, std::char_traits<char> >, std::basic_string_view<char, std::char_traits<char> >)) /home/elsid/dev/openmw/extern/sol3/sol/call.hpp:907
    #18 0x6256bc05b95c in sol::function_detail::upvalue_free_function<void (*)(std::basic_string_view<char, std::char_traits<char> >, std::basic_string_view<char, std::char_traits<char> >)>::real_call(lua_State*) /home/elsid/dev/openmw/extern/sol3/sol/function_types_stateless.hpp:46
    #19 0x6256bc058bea in sol::detail::lua_cfunction_trampoline(lua_State*, int (*)(lua_State*)) /home/elsid/dev/openmw/extern/sol3/sol/trampoline.hpp:108
    #20 0x6256bc058bea in int sol::detail::static_trampoline<&sol::function_detail::upvalue_free_function<void (*)(std::basic_string_view<char, std::char_traits<char> >, std::basic_string_view<char, std::char_traits<char> >)>::real_call>(lua_State*) /home/elsid/dev/openmw/extern/sol3/sol/trampoline.hpp:133
    #21 0x6256bc059121 in int sol::detail::typed_static_trampoline<int (*)(lua_State*), &sol::function_detail::upvalue_free_function<void (*)(std::basic_string_view<char, std::char_traits<char> >, std::basic_string_view<char, std::char_traits<char> >)>::real_call>(lua_State*) /home/elsid/dev/openmw/extern/sol3/sol/trampoline.hpp:200
    #22 0x6256bc059121 in int sol::function_detail::upvalue_free_function<void (*)(std::basic_string_view<char, std::char_traits<char> >, std::basic_string_view<char, std::char_traits<char> >)>::call<false, false>(lua_State*) /home/elsid/dev/openmw/extern/sol3/sol/function_types_stateless.hpp:56
    #23 0x6256bf0cfe49 in int sol::detail::trampoline<int (*&)(lua_State*)>(lua_State*, int (*&)(lua_State*)) /home/elsid/dev/openmw/extern/sol3/sol/trampoline.hpp:158
    #24 0x6256bf0d03e0 in sol::detail::c_trampoline(lua_State*, int (*)(lua_State*)) /home/elsid/dev/openmw/extern/sol3/sol/trampoline.hpp:183
    #25 0x72e686e8113a  (/home/elsid/dev/LuaJIT/build/gcc/asan/install/lib/libluajit-5.1.so.2+0x3613a) (BuildId: 1249151684379d19b11900f406fea9704a6375cb)
    #26 0x72e686eb3b23 in lua_pcall (/home/elsid/dev/LuaJIT/build/gcc/asan/install/lib/libluajit-5.1.so.2+0x68b23) (BuildId: 1249151684379d19b11900f406fea9704a6375cb)
    #27 0x6256bbfdd069 in sol::call_status sol::basic_protected_function<sol::basic_reference<false>, false, sol::basic_reference<false> >::luacall<true>(long, long, sol::detail::protected_handler<true, sol::basic_reference<false> >&) const /home/elsid/dev/openmw/extern/sol3/sol/protected_function.hpp:315
    #28 0x6256bbfdd069 in sol::protected_function_result sol::basic_protected_function<sol::basic_reference<false>, false, sol::basic_reference<false> >::invoke<true>(sol::types<>, std::integer_sequence<unsigned long>, long, sol::detail::protected_handler<true, sol::basic_reference<false> >&) const /home/elsid/dev/openmw/extern/sol3/sol/protected_function.hpp:346
    #29 0x6256bbfe25cc in decltype(auto) sol::basic_protected_function<sol::basic_reference<false>, false, sol::basic_reference<false> >::call<, float const&>(float const&) const /home/elsid/dev/openmw/extern/sol3/sol/protected_function.hpp:229
    #30 0x6256bbfe25cc in sol::protected_function_result sol::basic_protected_function<sol::basic_reference<false>, false, sol::basic_reference<false> >::operator()<float const&>(float const&) const /home/elsid/dev/openmw/extern/sol3/sol/protected_function.hpp:213
    #31 0x6256bbfe25cc in sol::protected_function_result LuaUtil::call<float const&>(LuaUtil::ScriptId, sol::basic_protected_function<sol::basic_reference<false>, false, sol::basic_reference<false> > const&, float const&) /home/elsid/dev/openmw/components/lua/luastate.hpp:276
    #32 0x6256bbfe34c4 in void LuaUtil::ScriptsContainer::callEngineHandlers<float>(LuaUtil::ScriptsContainer::EngineHandlerList&, float const&) /home/elsid/dev/openmw/components/lua/scriptscontainer.hpp:195
    #33 0x6256bbfbe806 in MWLua::MenuScripts::onFrame(float) /home/elsid/dev/openmw/apps/openmw/mwlua/menuscripts.hpp:35
    #34 0x6256bbfbe806 in MWLua::LuaManager::synchronizedUpdateUnsafe() /home/elsid/dev/openmw/apps/openmw/mwlua/luamanagerimp.cpp:277
    #35 0x6256bbfc01f3 in operator() /home/elsid/dev/openmw/apps/openmw/mwlua/luamanagerimp.cpp:244
    #36 0x6256bbfc01f3 in operator() /home/elsid/dev/openmw/components/lua/luastate.hpp:96
    #37 0x6256bbfc01f3 in _FUN /home/elsid/dev/openmw/components/lua/luastate.hpp:96
    #38 0x6256bf0cfe49 in int sol::detail::trampoline<int (*&)(lua_State*)>(lua_State*, int (*&)(lua_State*)) /home/elsid/dev/openmw/extern/sol3/sol/trampoline.hpp:158
    #39 0x6256bf0d03e0 in sol::detail::c_trampoline(lua_State*, int (*)(lua_State*)) /home/elsid/dev/openmw/extern/sol3/sol/trampoline.hpp:183
    #40 0x72e686e8113a  (/home/elsid/dev/LuaJIT/build/gcc/asan/install/lib/libluajit-5.1.so.2+0x3613a) (BuildId: 1249151684379d19b11900f406fea9704a6375cb)
    #41 0x72e686eb3b23 in lua_pcall (/home/elsid/dev/LuaJIT/build/gcc/asan/install/lib/libluajit-5.1.so.2+0x68b23) (BuildId: 1249151684379d19b11900f406fea9704a6375cb)
    #42 0x6256bbf8dc83 in invokeProtectedCall<MWLua::LuaManager::synchronizedUpdate()::<lambda(LuaUtil::LuaView&)> > /home/elsid/dev/openmw/components/lua/luastate.hpp:103
    #43 0x6256bbf8dc83 in protectedCall<MWLua::LuaManager::synchronizedUpdate()::<lambda(LuaUtil::LuaView&)> > /home/elsid/dev/openmw/components/lua/luastate.hpp:109
    #44 0x6256bbf8dc83 in MWLua::LuaManager::synchronizedUpdate() /home/elsid/dev/openmw/apps/openmw/mwlua/luamanagerimp.cpp:244
    #45 0x6256befe215b in OMW::Engine::frame(unsigned int, float) /home/elsid/dev/openmw/apps/openmw/engine.cpp:232
    #46 0x6256beff59f3 in OMW::Engine::go() /home/elsid/dev/openmw/apps/openmw/engine.cpp:1032
    #47 0x6256bb0e6627 in runApplication(int, char**) /home/elsid/dev/openmw/apps/openmw/main.cpp:228
    #48 0x6256c012b085 in Debug::wrapApplication(int (*)(int, char**), int, char**, std::basic_string_view<char, std::char_traits<char> >) /home/elsid/dev/openmw/components/debug/debugging.cpp:457
    #49 0x6256bb0dc915 in main /home/elsid/dev/openmw/apps/openmw/main.cpp:240
    #50 0x72e685035487  (/usr/lib/libc.so.6+0x27487) (BuildId: 0b707b217b15b106c25fe51df3724b25848310c0)
    #51 0x72e68503554b in __libc_start_main (/usr/lib/libc.so.6+0x2754b) (BuildId: 0b707b217b15b106c25fe51df3724b25848310c0)
    #52 0x6256bb0dc6e4 in _start (/home/elsid/dev/openmw/build/gcc/asan/openmw+0x10e86e4) (BuildId: b7832a49c4b925e87996aa68f9fd058fb082db71)

0x5070001905c8 is located 56 bytes inside of 80-byte region [0x507000190590,0x5070001905e0)
freed by thread T0 here:
    #0 0x72e68b2ff4f2 in operator delete(void*, unsigned long) /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_new_delete.cpp:164
    #1 0x6256befa6de2 in std::__new_allocator<std::_List_node<MWState::Character> >::deallocate(std::_List_node<MWState::Character>*, unsigned long) /usr/include/c++/14.2.1/bits/new_allocator.h:172
    #2 0x6256befa6de2 in std::allocator<std::_List_node<MWState::Character> >::deallocate(std::_List_node<MWState::Character>*, unsigned long) /usr/include/c++/14.2.1/bits/allocator.h:208
    #3 0x6256befa6de2 in std::allocator_traits<std::allocator<std::_List_node<MWState::Character> > >::deallocate(std::allocator<std::_List_node<MWState::Character> >&, std::_List_node<MWState::Character>*, unsigned long) /usr/include/c++/14.2.1/bits/alloc_traits.h:550
    #4 0x6256befa6de2 in std::__cxx11::_List_base<MWState::Character, std::allocator<MWState::Character> >::_M_put_node(std::_List_node<MWState::Character>*) /usr/include/c++/14.2.1/bits/stl_list.h:522
    #5 0x6256befa6de2 in std::__cxx11::list<MWState::Character, std::allocator<MWState::Character> >::_M_erase(std::_List_iterator<MWState::Character>) /usr/include/c++/14.2.1/bits/stl_list.h:2023
    #6 0x6256befa6de2 in std::__cxx11::list<MWState::Character, std::allocator<MWState::Character> >::erase(std::_List_const_iterator<MWState::Character>) /usr/include/c++/14.2.1/bits/list.tcc:158
    #7 0x6256befa026c in MWState::CharacterManager::deleteSlot(MWState::Character const*, MWState::Slot const*) /home/elsid/dev/openmw/apps/openmw/mwstate/charactermanager.cpp:53
    #8 0x6256bef7b4b4 in MWState::StateManager::deleteGame(MWState::Character const*, MWState::Slot const*) /home/elsid/dev/openmw/apps/openmw/mwstate/statemanagerimp.cpp:709
    #9 0x6256bc049341 in operator() /home/elsid/dev/openmw/apps/openmw/mwlua/menuscripts.cpp:61
    #10 0x6256bc049341 in _FUN /home/elsid/dev/openmw/apps/openmw/mwlua/menuscripts.cpp:62
    #11 0x6256bc05b95c in decltype(auto) sol::wrapper<void (*)(std::basic_string_view<char, std::char_traits<char> >, std::basic_string_view<char, std::char_traits<char> >), void>::call<std::basic_string_view<char, std::char_traits<char> >, std::basic_string_view<char, std::char_traits<char> > >(void (*&)(std::basic_string_view<char, std::char_traits<char> >, std::basic_string_view<char, std::char_traits<char> >), std::basic_string_view<char, std::char_traits<char> >&&, std::basic_string_view<char, std::char_traits<char> >&&) /home/elsid/dev/openmw/extern/sol3/sol/wrapper.hpp:70
    #12 0x6256bc05b95c in decltype(auto) sol::wrapper<void (*)(std::basic_string_view<char, std::char_traits<char> >, std::basic_string_view<char, std::char_traits<char> >), void>::caller::operator()<std::basic_string_view<char, std::char_traits<char> >, std::basic_string_view<char, std::char_traits<char> > >(void (*&)(std::basic_string_view<char, std::char_traits<char> >, std::basic_string_view<char, std::char_traits<char> >), std::basic_string_view<char, std::char_traits<char> >&&, std::basic_string_view<char, std::char_traits<char> >&&) const /home/elsid/dev/openmw/extern/sol3/sol/wrapper.hpp:76
    #13 0x6256bc05b95c in eval<true, sol::argument_handler<sol::types<void, std::basic_string_view<char, std::char_traits<char> >, std::basic_string_view<char, std::char_traits<char> > > >&, sol::wrapper<void (*)(std::basic_string_view<char>, std::basic_string_view<char>), void>::caller, void (*&)(std::basic_string_view<char, std::char_traits<char> >, std::basic_string_view<char, std::char_traits<char> >), std::basic_string_view<char, std::char_traits<char> >, std::basic_string_view<char, std::char_traits<char> > > /home/elsid/dev/openmw/extern/sol3/sol/stack.hpp:146
    #14 0x6256bc05b95c in eval<true, std::basic_string_view<char>, 1, sol::argument_handler<sol::types<void, std::basic_string_view<char, std::char_traits<char> >, std::basic_string_view<char, std::char_traits<char> > > >&, sol::wrapper<void (*)(std::basic_string_view<char>, std::basic_string_view<char>), void>::caller, void (*&)(std::basic_string_view<char, std::char_traits<char> >, std::basic_string_view<char, std::char_traits<char> >), std::basic_string_view<char, std::char_traits<char> > > /home/elsid/dev/openmw/extern/sol3/sol/stack.hpp:169
    #15 0x6256bc05b95c in eval<true, std::basic_string_view<char>, std::basic_string_view<char, std::char_traits<char> >, 0, 1, sol::argument_handler<sol::types<void, std::basic_string_view<char, std::char_traits<char> >, std::basic_string_view<char, std::char_traits<char> > > >&, sol::wrapper<void (*)(std::basic_string_view<char>, std::basic_string_view<char>), void>::caller, void (*&)(std::basic_string_view<char, std::char_traits<char> >, std::basic_string_view<char, std::char_traits<char> >)> /home/elsid/dev/openmw/extern/sol3/sol/stack.hpp:169
    #16 0x6256bc05b95c in decltype(auto) sol::stack::stack_detail::call<true, 0ul, 1ul, void, std::basic_string_view<char, std::char_traits<char> >, std::basic_string_view<char, std::char_traits<char> >, sol::wrapper<void (*)(std::basic_string_view<char, std::char_traits<char> >, std::basic_string_view<char, std::char_traits<char> >), void>::caller, void (*&)(std::basic_string_view<char, std::char_traits<char> >, std::basic_string_view<char, std::char_traits<char> >)>(sol::types<void>, sol::types<std::basic_string_view<char, std::char_traits<char> >, std::basic_string_view<char, std::char_traits<char> > >, std::integer_sequence<unsigned long, 0ul, 1ul>, lua_State*, int, sol::wrapper<void (*)(std::basic_string_view<char, std::char_traits<char> >, std::basic_string_view<char, std::char_traits<char> >), void>::caller&&, void (*&)(std::basic_string_view<char, std::char_traits<char> >, std::basic_string_view<char, std::char_traits<char> >)) /home/elsid/dev/openmw/extern/sol3/sol/stack.hpp:195
    #17 0x6256bc05b95c in decltype(auto) sol::stack::call<true, void, std::basic_string_view<char, std::char_traits<char> >, std::basic_string_view<char, std::char_traits<char> >, sol::wrapper<void (*)(std::basic_string_view<char, std::char_traits<char> >, std::basic_string_view<char, std::char_traits<char> >), void>::caller, void (*&)(std::basic_string_view<char, std::char_traits<char> >, std::basic_string_view<char, std::char_traits<char> >)>(sol::types<void>, sol::types<std::basic_string_view<char, std::char_traits<char> >, std::basic_string_view<char, std::char_traits<char> > >, lua_State*, int, sol::wrapper<void (*)(std::basic_string_view<char, std::char_traits<char> >, std::basic_string_view<char, std::char_traits<char> >), void>::caller&&, void (*&)(std::basic_string_view<char, std::char_traits<char> >, std::basic_string_view<char, std::char_traits<char> >)) /home/elsid/dev/openmw/extern/sol3/sol/stack.hpp:215
    #18 0x6256bc05b95c in int sol::stack::call_into_lua<true, true, void, , std::basic_string_view<char, std::char_traits<char> >, std::basic_string_view<char, std::char_traits<char> >, sol::wrapper<void (*)(std::basic_string_view<char, std::char_traits<char> >, std::basic_string_view<char, std::char_traits<char> >), void>::caller, void (*&)(std::basic_string_view<char, std::char_traits<char> >, std::basic_string_view<char, std::char_traits<char> >)>(sol::types<void>, sol::types<std::basic_string_view<char, std::char_traits<char> >, std::basic_string_view<char, std::char_traits<char> > >, lua_State*, int, sol::wrapper<void (*)(std::basic_string_view<char, std::char_traits<char> >, std::basic_string_view<char, std::char_traits<char> >), void>::caller&&, void (*&)(std::basic_string_view<char, std::char_traits<char> >, std::basic_string_view<char, std::char_traits<char> >)) /home/elsid/dev/openmw/extern/sol3/sol/stack.hpp:257
    #19 0x6256bc05b95c in int sol::call_detail::agnostic_lua_call_wrapper<void (*)(std::basic_string_view<char, std::char_traits<char> >, std::basic_string_view<char, std::char_traits<char> >), true, false, true, 0, true, void>::call<void (*&)(std::basic_string_view<char, std::char_traits<char> >, std::basic_string_view<char, std::char_traits<char> >)>(lua_State*, void (*&)(std::basic_string_view<char, std::char_traits<char> >, std::basic_string_view<char, std::char_traits<char> >)) /home/elsid/dev/openmw/extern/sol3/sol/call.hpp:378
    #20 0x6256bc05b95c in int sol::call_detail::lua_call_wrapper<void, void (*)(std::basic_string_view<char, std::char_traits<char> >, std::basic_string_view<char, std::char_traits<char> >), true, false, true, 0, true, void>::call<void (*&)(std::basic_string_view<char, std::char_traits<char> >, std::basic_string_view<char, std::char_traits<char> >)>(lua_State*, void (*&)(std::basic_string_view<char, std::char_traits<char> >, std::basic_string_view<char, std::char_traits<char> >)) /home/elsid/dev/openmw/extern/sol3/sol/call.hpp:599
    #21 0x6256bc05b95c in int sol::call_detail::call_wrapped<void, true, false, 0, true, true, void (*&)(std::basic_string_view<char, std::char_traits<char> >, std::basic_string_view<char, std::char_traits<char> >)>(lua_State*, void (*&)(std::basic_string_view<char, std::char_traits<char> >, std::basic_string_view<char, std::char_traits<char> >)) /home/elsid/dev/openmw/extern/sol3/sol/call.hpp:907
    #22 0x6256bc05b95c in sol::function_detail::upvalue_free_function<void (*)(std::basic_string_view<char, std::char_traits<char> >, std::basic_string_view<char, std::char_traits<char> >)>::real_call(lua_State*) /home/elsid/dev/openmw/extern/sol3/sol/function_types_stateless.hpp:46
    #23 0x6256bc058bea in sol::detail::lua_cfunction_trampoline(lua_State*, int (*)(lua_State*)) /home/elsid/dev/openmw/extern/sol3/sol/trampoline.hpp:108
    #24 0x6256bc058bea in int sol::detail::static_trampoline<&sol::function_detail::upvalue_free_function<void (*)(std::basic_string_view<char, std::char_traits<char> >, std::basic_string_view<char, std::char_traits<char> >)>::real_call>(lua_State*) /home/elsid/dev/openmw/extern/sol3/sol/trampoline.hpp:133
    #25 0x6256bc059121 in int sol::detail::typed_static_trampoline<int (*)(lua_State*), &sol::function_detail::upvalue_free_function<void (*)(std::basic_string_view<char, std::char_traits<char> >, std::basic_string_view<char, std::char_traits<char> >)>::real_call>(lua_State*) /home/elsid/dev/openmw/extern/sol3/sol/trampoline.hpp:200
    #26 0x6256bc059121 in int sol::function_detail::upvalue_free_function<void (*)(std::basic_string_view<char, std::char_traits<char> >, std::basic_string_view<char, std::char_traits<char> >)>::call<false, false>(lua_State*) /home/elsid/dev/openmw/extern/sol3/sol/function_types_stateless.hpp:56
    #27 0x6256bf0cfe49 in int sol::detail::trampoline<int (*&)(lua_State*)>(lua_State*, int (*&)(lua_State*)) /home/elsid/dev/openmw/extern/sol3/sol/trampoline.hpp:158
    #28 0x6256bf0d03e0 in sol::detail::c_trampoline(lua_State*, int (*)(lua_State*)) /home/elsid/dev/openmw/extern/sol3/sol/trampoline.hpp:183
    #29 0x72e686e8113a  (/home/elsid/dev/LuaJIT/build/gcc/asan/install/lib/libluajit-5.1.so.2+0x3613a) (BuildId: 1249151684379d19b11900f406fea9704a6375cb)

previously allocated by thread T0 here:
    #0 0x72e68b2fe392 in operator new(unsigned long) /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_new_delete.cpp:95
    #1 0x6256befa3c9d in std::__new_allocator<std::_List_node<MWState::Character> >::allocate(unsigned long, void const*) /usr/include/c++/14.2.1/bits/new_allocator.h:151
    #2 0x6256befa3c9d in std::allocator<std::_List_node<MWState::Character> >::allocate(unsigned long) /usr/include/c++/14.2.1/bits/allocator.h:196
    #3 0x6256befa3c9d in std::allocator_traits<std::allocator<std::_List_node<MWState::Character> > >::allocate(std::allocator<std::_List_node<MWState::Character> >&, unsigned long) /usr/include/c++/14.2.1/bits/alloc_traits.h:515
    #4 0x6256befa3c9d in std::__cxx11::_List_base<MWState::Character, std::allocator<MWState::Character> >::_M_get_node() /usr/include/c++/14.2.1/bits/stl_list.h:518
    #5 0x6256befa3c9d in std::_List_node<MWState::Character>* std::__cxx11::list<MWState::Character, std::allocator<MWState::Character> >::_M_create_node<std::filesystem::__cxx11::path&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&>(std::filesystem::__cxx11::path&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&) /usr/include/c++/14.2.1/bits/stl_list.h:710
    #6 0x6256befa3c9d in void std::__cxx11::list<MWState::Character, std::allocator<MWState::Character> >::_M_insert<std::filesystem::__cxx11::path&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&>(std::_List_iterator<MWState::Character>, std::filesystem::__cxx11::path&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&) /usr/include/c++/14.2.1/bits/stl_list.h:2004
    #7 0x6256befa3c9d in MWState::Character& std::__cxx11::list<MWState::Character, std::allocator<MWState::Character> >::emplace_back<std::filesystem::__cxx11::path&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&>(std::filesystem::__cxx11::path&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&) /usr/include/c++/14.2.1/bits/stl_list.h:1321
    #8 0x6256befa3c9d in MWState::CharacterManager::createCharacter(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) /home/elsid/dev/openmw/apps/openmw/mwstate/charactermanager.cpp:84
    #9 0x6256bef8325c in MWState::StateManager::saveGame(std::basic_string_view<char, std::char_traits<char> >, MWState::Slot const*) /home/elsid/dev/openmw/apps/openmw/mwstate/statemanagerimp.cpp:231
    #10 0x6256bc047438 in operator() /home/elsid/dev/openmw/apps/openmw/mwlua/menuscripts.cpp:79
    #11 0x6256bc047438 in _FUN /home/elsid/dev/openmw/apps/openmw/mwlua/menuscripts.cpp:80
    #12 0x6256bc05d474 in decltype(auto) sol::wrapper<void (*)(std::basic_string_view<char, std::char_traits<char> >, sol::optional<std::basic_string_view<char, std::char_traits<char> > >), void>::call<std::basic_string_view<char, std::char_traits<char> >, sol::optional<std::basic_string_view<char, std::char_traits<char> > > >(void (*&)(std::basic_string_view<char, std::char_traits<char> >, sol::optional<std::basic_string_view<char, std::char_traits<char> > >), std::basic_string_view<char, std::char_traits<char> >&&, sol::optional<std::basic_string_view<char, std::char_traits<char> > >&&) /home/elsid/dev/openmw/extern/sol3/sol/wrapper.hpp:70
    #13 0x6256bc05d474 in decltype(auto) sol::wrapper<void (*)(std::basic_string_view<char, std::char_traits<char> >, sol::optional<std::basic_string_view<char, std::char_traits<char> > >), void>::caller::operator()<std::basic_string_view<char, std::char_traits<char> >, sol::optional<std::basic_string_view<char, std::char_traits<char> > > >(void (*&)(std::basic_string_view<char, std::char_traits<char> >, sol::optional<std::basic_string_view<char, std::char_traits<char> > >), std::basic_string_view<char, std::char_traits<char> >&&, sol::optional<std::basic_string_view<char, std::char_traits<char> > >&&) const /home/elsid/dev/openmw/extern/sol3/sol/wrapper.hpp:76
    #14 0x6256bc05d474 in eval<true, sol::argument_handler<sol::types<void, std::basic_string_view<char, std::char_traits<char> >, sol::optional<std::basic_string_view<char, std::char_traits<char> > > > >&, sol::wrapper<void (*)(std::basic_string_view<char>, sol::optional<std::basic_string_view<char> >), void>::caller, void (*&)(std::basic_string_view<char, std::char_traits<char> >, sol::optional<std::basic_string_view<char, std::char_traits<char> > >), std::basic_string_view<char, std::char_traits<char> >, sol::optional<std::basic_string_view<char, std::char_traits<char> > > > /home/elsid/dev/openmw/extern/sol3/sol/stack.hpp:146
    #15 0x6256bc05d474 in eval<true, sol::optional<std::basic_string_view<char> >, 1, sol::argument_handler<sol::types<void, std::basic_string_view<char, std::char_traits<char> >, sol::optional<std::basic_string_view<char, std::char_traits<char> > > > >&, sol::wrapper<void (*)(std::basic_string_view<char>, sol::optional<std::basic_string_view<char> >), void>::caller, void (*&)(std::basic_string_view<char, std::char_traits<char> >, sol::optional<std::basic_string_view<char, std::char_traits<char> > >), std::basic_string_view<char, std::char_traits<char> > > /home/elsid/dev/openmw/extern/sol3/sol/stack.hpp:169
    #16 0x6256bc05d474 in eval<true, std::basic_string_view<char>, sol::optional<std::basic_string_view<char, std::char_traits<char> > >, 0, 1, sol::argument_handler<sol::types<void, std::basic_string_view<char, std::char_traits<char> >, sol::optional<std::basic_string_view<char, std::char_traits<char> > > > >&, sol::wrapper<void (*)(std::basic_string_view<char>, sol::optional<std::basic_string_view<char> >), void>::caller, void (*&)(std::basic_string_view<char, std::char_traits<char> >, sol::optional<std::basic_string_view<char, std::char_traits<char> > >)> /home/elsid/dev/openmw/extern/sol3/sol/stack.hpp:169
    #17 0x6256bc05d474 in decltype(auto) sol::stack::stack_detail::call<true, 0ul, 1ul, void, std::basic_string_view<char, std::char_traits<char> >, sol::optional<std::basic_string_view<char, std::char_traits<char> > >, sol::wrapper<void (*)(std::basic_string_view<char, std::char_traits<char> >, sol::optional<std::basic_string_view<char, std::char_traits<char> > >), void>::caller, void (*&)(std::basic_string_view<char, std::char_traits<char> >, sol::optional<std::basic_string_view<char, std::char_traits<char> > >)>(sol::types<void>, sol::types<std::basic_string_view<char, std::char_traits<char> >, sol::optional<std::basic_string_view<char, std::char_traits<char> > > >, std::integer_sequence<unsigned long, 0ul, 1ul>, lua_State*, int, sol::wrapper<void (*)(std::basic_string_view<char, std::char_traits<char> >, sol::optional<std::basic_string_view<char, std::char_traits<char> > >), void>::caller&&, void (*&)(std::basic_string_view<char, std::char_traits<char> >, sol::optional<std::basic_string_view<char, std::char_traits<char> > >)) /home/elsid/dev/openmw/extern/sol3/sol/stack.hpp:195
    #18 0x6256bc05d474 in decltype(auto) sol::stack::call<true, void, std::basic_string_view<char, std::char_traits<char> >, sol::optional<std::basic_string_view<char, std::char_traits<char> > >, sol::wrapper<void (*)(std::basic_string_view<char, std::char_traits<char> >, sol::optional<std::basic_string_view<char, std::char_traits<char> > >), void>::caller, void (*&)(std::basic_string_view<char, std::char_traits<char> >, sol::optional<std::basic_string_view<char, std::char_traits<char> > >)>(sol::types<void>, sol::types<std::basic_string_view<char, std::char_traits<char> >, sol::optional<std::basic_string_view<char, std::char_traits<char> > > >, lua_State*, int, sol::wrapper<void (*)(std::basic_string_view<char, std::char_traits<char> >, sol::optional<std::basic_string_view<char, std::char_traits<char> > >), void>::caller&&, void (*&)(std::basic_string_view<char, std::char_traits<char> >, sol::optional<std::basic_string_view<char, std::char_traits<char> > >)) /home/elsid/dev/openmw/extern/sol3/sol/stack.hpp:215
    #19 0x6256bc05d474 in int sol::stack::call_into_lua<true, true, void, , std::basic_string_view<char, std::char_traits<char> >, sol::optional<std::basic_string_view<char, std::char_traits<char> > >, sol::wrapper<void (*)(std::basic_string_view<char, std::char_traits<char> >, sol::optional<std::basic_string_view<char, std::char_traits<char> > >), void>::caller, void (*&)(std::basic_string_view<char, std::char_traits<char> >, sol::optional<std::basic_string_view<char, std::char_traits<char> > >)>(sol::types<void>, sol::types<std::basic_string_view<char, std::char_traits<char> >, sol::optional<std::basic_string_view<char, std::char_traits<char> > > >, lua_State*, int, sol::wrapper<void (*)(std::basic_string_view<char, std::char_traits<char> >, sol::optional<std::basic_string_view<char, std::char_traits<char> > >), void>::caller&&, void (*&)(std::basic_string_view<char, std::char_traits<char> >, sol::optional<std::basic_string_view<char, std::char_traits<char> > >)) /home/elsid/dev/openmw/extern/sol3/sol/stack.hpp:257
    #20 0x6256bc05d474 in int sol::call_detail::agnostic_lua_call_wrapper<void (*)(std::basic_string_view<char, std::char_traits<char> >, sol::optional<std::basic_string_view<char, std::char_traits<char> > >), true, false, true, 0, true, void>::call<void (*&)(std::basic_string_view<char, std::char_traits<char> >, sol::optional<std::basic_string_view<char, std::char_traits<char> > >)>(lua_State*, void (*&)(std::basic_string_view<char, std::char_traits<char> >, sol::optional<std::basic_string_view<char, std::char_traits<char> > >)) /home/elsid/dev/openmw/extern/sol3/sol/call.hpp:378
    #21 0x6256bc05d474 in int sol::call_detail::lua_call_wrapper<void, void (*)(std::basic_string_view<char, std::char_traits<char> >, sol::optional<std::basic_string_view<char, std::char_traits<char> > >), true, false, true, 0, true, void>::call<void (*&)(std::basic_string_view<char, std::char_traits<char> >, sol::optional<std::basic_string_view<char, std::char_traits<char> > >)>(lua_State*, void (*&)(std::basic_string_view<char, std::char_traits<char> >, sol::optional<std::basic_string_view<char, std::char_traits<char> > >)) /home/elsid/dev/openmw/extern/sol3/sol/call.hpp:599
    #22 0x6256bc05d474 in int sol::call_detail::call_wrapped<void, true, false, 0, true, true, void (*&)(std::basic_string_view<char, std::char_traits<char> >, sol::optional<std::basic_string_view<char, std::char_traits<char> > >)>(lua_State*, void (*&)(std::basic_string_view<char, std::char_traits<char> >, sol::optional<std::basic_string_view<char, std::char_traits<char> > >)) /home/elsid/dev/openmw/extern/sol3/sol/call.hpp:907
    #23 0x6256bc05d474 in sol::function_detail::upvalue_free_function<void (*)(std::basic_string_view<char, std::char_traits<char> >, sol::optional<std::basic_string_view<char, std::char_traits<char> > >)>::real_call(lua_State*) /home/elsid/dev/openmw/extern/sol3/sol/function_types_stateless.hpp:46
    #24 0x6256bc0597d0 in sol::detail::lua_cfunction_trampoline(lua_State*, int (*)(lua_State*)) /home/elsid/dev/openmw/extern/sol3/sol/trampoline.hpp:108
    #25 0x6256bc0597d0 in int sol::detail::static_trampoline<&sol::function_detail::upvalue_free_function<void (*)(std::basic_string_view<char, std::char_traits<char> >, sol::optional<std::basic_string_view<char, std::char_traits<char> > >)>::real_call>(lua_State*) /home/elsid/dev/openmw/extern/sol3/sol/trampoline.hpp:133
    #26 0x6256bc059d07 in int sol::detail::typed_static_trampoline<int (*)(lua_State*), &sol::function_detail::upvalue_free_function<void (*)(std::basic_string_view<char, std::char_traits<char> >, sol::optional<std::basic_string_view<char, std::char_traits<char> > >)>::real_call>(lua_State*) /home/elsid/dev/openmw/extern/sol3/sol/trampoline.hpp:200
    #27 0x6256bc059d07 in int sol::function_detail::upvalue_free_function<void (*)(std::basic_string_view<char, std::char_traits<char> >, sol::optional<std::basic_string_view<char, std::char_traits<char> > >)>::call<false, false>(lua_State*) /home/elsid/dev/openmw/extern/sol3/sol/function_types_stateless.hpp:56
    #28 0x6256bf0cfe49 in int sol::detail::trampoline<int (*&)(lua_State*)>(lua_State*, int (*&)(lua_State*)) /home/elsid/dev/openmw/extern/sol3/sol/trampoline.hpp:158
    #29 0x6256bf0d03e0 in sol::detail::c_trampoline(lua_State*, int (*)(lua_State*)) /home/elsid/dev/openmw/extern/sol3/sol/trampoline.hpp:183
    #30 0x72e686e8113a  (/home/elsid/dev/LuaJIT/build/gcc/asan/install/lib/libluajit-5.1.so.2+0x3613a) (BuildId: 1249151684379d19b11900f406fea9704a6375cb)

SUMMARY: AddressSanitizer: heap-use-after-free /usr/include/c++/14.2.1/bits/stl_iterator.h:1068 in __gnu_cxx::__normal_iterator<MWState::Slot const*, std::vector<MWState::Slot, std::allocator<MWState::Slot> > >::__normal_iterator(MWState::Slot const* const&)
Shadow bytes around the buggy address:
  0x507000190300: 00 00 00 00 00 00 00 00 fa fa fa fa fd fd fd fd
  0x507000190380: fd fd fd fd fd fd fa fa fa fa 00 00 00 00 00 00
  0x507000190400: 00 00 00 00 fa fa fa fa fd fd fd fd fd fd fd fd
  0x507000190480: fd fd fa fa fa fa fd fd fd fd fd fd fd fd fd fd
  0x507000190500: fa fa fa fa fd fd fd fd fd fd fd fd fd fd fa fa
=>0x507000190580: fa fa fd fd fd fd fd fd fd[fd]fd fd fa fa fa fa
  0x507000190600: fd fd fd fd fd fd fd fd fd fd fa fa fa fa fd fd
  0x507000190680: fd fd fd fd fd fd fd fd fa fa fa fa fd fd fd fd
  0x507000190700: fd fd fd fd fd fd fa fa fa fa 00 00 00 00 00 00
  0x507000190780: 00 00 00 fa fa fa fa fa fd fd fd fd fd fd fd fd
  0x507000190800: fd fd fa fa fa fa fd fd fd fd fd fd fd fd fd fd
Shadow byte legend (one shadow byte represents 8 application bytes):
  Addressable:           00
  Partially addressable: 01 02 03 04 05 06 07 
  Heap left redzone:       fa
  Freed heap region:       fd
  Stack left redzone:      f1
  Stack mid redzone:       f2
  Stack right redzone:     f3
  Stack after return:      f5
  Stack use after scope:   f8
  Global redzone:          f9
  Global init order:       f6
  Poisoned by user:        f7
  Container overflow:      fc
  Array cookie:            ac
  Intra object redzone:    bb
  ASan internal:           fe
  Left alloca redzone:     ca
  Right alloca redzone:    cb
==29165==ABORTING
Edited by elsid