ikaros-project / ikaros

An open infrastructure for system level brain modeling
GNU General Public License v2.0
23 stars 23 forks source link

Webui/Kernel: Crash problem #156

Closed trondarild closed 2 years ago

trondarild commented 4 years ago

Update: This was due to using an invalid (misspelled) source for a widget. Hence get a null pointer on IKAROS.cc::627. But is it possible to avoid a crash here and give an error message instead?

A somewhat hard to determine bug where ikaros crashes due to content of xml file (ie adding a slider or a table to webui), but difficult to see pattern. Unfortunately dont have a good example xml file right now to reproduce. But error appeared when running pupil model which I guess contains a lot of text. Perhaps a buffer overflow problem?

Stack trace from debug:

std::_Hashtable<std::cxx11::basic_string<char, std::char_traits, std::allocator >, std::pair<std::cxx11::basic_string<char, std::char_traits, std::allocator > const, std::cxx11::basic_string<char, std::char_traits, std::allocator > >, std::allocator<std::pair<std::cxx11::basic_string<char, std::char_traits, std::allocator > const, std::cxx11::basic_string<char, std::char_traits, std::allocator > > >, std::detail::_Select1st, std::equal_to<std::cxx11::basic_string<char, std::char_traits, std::allocator > >, std::hash<std::cxx11::basic_string<char, std::char_traits, std::allocator > >, std::detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, std::detail::_Prime_rehash_policy, std::detail::_Hashtable_traits<true, false, true> >::_M_begin(const std::_Hashtable<std::cxx11::basic_string<char, std::char_traits, std::allocator >, std::pair<std::cxx11::basic_string<char, std::char_traits, std::allocator > const, std::cxx11::basic_string<char, std::char_traits, std::allocator > >, std::allocator<std::pair<std::cxx11::basic_string<char, std::char_traits, std::allocator > const, std::cxx11::basic_string<char, std::char_traits, std::allocator > > >, std::detail::_Select1st, std::equal_to<std::cxx11::basic_string<char, std::char_traits, std::allocator > >, std::hash<std::cxx11::basic_string<char, std::char_traits, std::allocator > >, std::__detail::_Mod_range_hashing, std::detail::_Default_ranged_hash, std::detail::_Prime_rehash_policy, std::__detail::_Hashtable_traits<true, false, true> > * const this) (/usr/include/c++/7/bits/hashtable.h:377) std::_Hashtable<std::cxx11::basic_string<char, std::char_traits, std::allocator >, std::pair<std::cxx11::basic_string<char, std::char_traits, std::allocator > const, std::cxx11::basic_string<char, std::char_traits, std::allocator > >, std::allocator<std::pair<std::cxx11::basic_string<char, std::char_traits, std::allocator > const, std::cxx11::basic_string<char, std::char_traits, std::allocator > > >, std::detail::_Select1st, std::equal_to<std::cxx11::basic_string<char, std::char_traits, std::allocator > >, std::hash<std::cxx11::basic_string<char, std::char_traits, std::allocator > >, std::detail::_Mod_range_hashing, std::detail::_Default_ranged_hash, std::__detail::_Prime_rehash_policy, std::detail::_Hashtable_traits<true, false, true> >::begin(std::_Hashtable<std::cxx11::basic_string<char, std::char_traits, std::allocator >, std::pair<std::cxx11::basic_string<char, std::char_traits, std::allocator > const, std::cxx11::basic_string<char, std::char_traits, std::allocator > >, std::allocator<std::pair<std::cxx11::basic_string<char, std::char_traits, std::allocator > const, std::cxx11::basic_string<char, std::char_traits, std::allocator > > >, std::detail::_Select1st, std::equal_to<std::cxx11::basic_string<char, std::char_traits, std::allocator > >, std::hash<std::cxx11::basic_string<char, std::char_traits, std::allocator > >, std::detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, std::detail::_Prime_rehash_policy, std::detail::_Hashtable_traits<true, false, true> > * const this) (/usr/include/c++/7/bits/hashtable.h:492) std::unordered_map<std::cxx11::basic_string<char, std::char_traits, std::allocator >, std::cxx11::basic_string<char, std::char_traits, std::allocator >, std::hash<std::__cxx11::basic_string<char, std::char_traits, std::allocator > >, std::equal_to<std::cxx11::basic_string<char, std::char_traits, std::allocator > >, std::allocator<std::pair<std::cxx11::basic_string<char, std::char_traits, std::allocator > const, std::cxx11::basic_string<char, std::char_traits, std::allocator > > > >::begin(std::unordered_map<std::cxx11::basic_string<char, std::char_traits, std::allocator >, std::cxx11::basic_string<char, std::char_traits, std::allocator >, std::hash<std::cxx11::basic_string<char, std::char_traits, std::allocator > >, std::equal_to<std::cxx11::basic_string<char, std::char_traits, std::allocator > >, std::allocator<std::pair<std::cxx11::basic_string<char, std::char_traits, std::allocator > const, std::__cxx11::basic_string<char, std::char_traits, std::allocator > > > > const this) (/usr/include/c++/7/bits/unordered_map.h:324) Element::JSONAttributeStringabi:cxx11(Element const this, int d) (/home/trondarild/ikaros/ikaros/Source/Kernel/IKAROS.cc:253) OutputElement::JSONStringabi:cxx11(OutputElement const this, int d) (/home/trondarild/ikaros/ikaros/Source/Kernel/IKAROS.cc:343) GroupElement::JSONStringabi:cxx11(GroupElement const this, int d) (/home/trondarild/ikaros/ikaros/Source/Kernel/IKAROS.cc:627) GroupElement::JSONStringabi:cxx11(GroupElement const this, int d) (/home/trondarild/ikaros/ikaros/Source/Kernel/IKAROS.cc:678) Kernel::JSONString[abi:cxx11]()(Kernel const this) (/home/trondarild/ikaros/ikaros/Source/Kernel/IKAROS.cc:2120) Kernel::HandleControlChange(Kernel const this, char uri, char args) (/home/trondarild/ikaros/ikaros/Source/Kernel/IKAROS.cc:3979) Kernel::HandleHTTPRequest(Kernel const this) (/home/trondarild/ikaros/ikaros/Source/Kernel/IKAROS.cc:4044) Kernel::HandleHTTPThread(Kernel const this) (/home/trondarild/ikaros/ikaros/Source/Kernel/IKAROS.cc:4212) Kernel::StartHTTPThread(Kernel k) (/home/trondarild/ikaros/ikaros/Source/Kernel/IKAROS.cc:4222) std::invoke_impl<void, void ()(Kernel), Kernel>(void (&&)(Kernel ) f) (/usr/include/c++/7/bits/invoke.h:60) std::invoke<void ()(Kernel), Kernel>(void (&&)(Kernel ) __fn) (/usr/include/c++/7/bits/invoke.h:96) std::thread::_Invoker<std::tuple<void ()(Kernel), Kernel> >::_M_invoke<0ul, 1ul>(std::thread::_Invoker<std::tuple<void ()(Kernel), Kernel> > const this) (/usr/include/c++/7/thread:234) std::thread::_Invoker<std::tuple<void ()(Kernel), Kernel> >::operator()(std::thread::_Invoker<std::tuple<void ()(Kernel), Kernel> > const this) (/usr/include/c++/7/thread:243) std::thread::_State_impl<std::thread::_Invoker<std::tuple<void ()(Kernel), Kernel> > >::_M_run(std::thread::_State_impl<std::thread::_Invoker<std::tuple<void ()(Kernel), Kernel> > > const this) (/usr/include/c++/7/thread:186) libstdc++.so.6![Unknown/Just-In-Time compiled code] (Unknown Source:0) libpthread.so.0!start_thread(void * arg) (/build/glibc-OTsEL5/glibc-2.27/nptl/pthread_create.c:463) libc.so.6!clone() (/build/glibc-OTsEL5/glibc-2.27/sysdeps/unix/sysv/linux/x86_64/clone.S:95)

ikaros-project commented 2 years ago

Probably no longer relevant.