Skip to content

Increase demangle buffer size

Wei Mingzhi requested to merge increase-demangle-buffer into master

Previously VTK uses a size of 1024 for symbol demangling in SymbolProperties::Demangle(). This is not enough for some boost-based functions like this, and will cause crash:

(gdb) p symbol $9 = 0x674940 "_ZN5boost9iterators20iterator_core_access11dereferenceINS_8signals26detail20slot_call_iterator_tINS4_21variadic_slot_invokerINS4_9void_typeEJEEESt14_List_iteratorINS_10shared_ptrINS4_15connection_bodyISt4pairINS4_15slot_meta_groupENS_8optionalIiEEENS3_4slotIFvvENS_8functionISI_EEEENS3_5mutexEEEEEESN_EEEENT_9referenceERKSR_" (gdb) n 1361 char* demangledSymbol = (gdb) 1363 if (!status) { (gdb) p demangledSymbol $10 = 0x1236800 "boost::signals2::detail::slot_call_iterator_t<boost::signals2::detail::variadic_slot_invoker<boost::signals2::detail::void_type>, std::_List_iterator<boost::shared_ptr<boost::signals2::detail::connection_body<std::pair<boost::signals2::detail::slot_meta_group, boost::optional<int> >, boost::signals2::slot<void (), boost::function<void ()> >, boost::signals2::mutex> > >, boost::signals2::detail::connection_body<std::pair<boost::signals2::detail::slot_meta_group, boost::optional<int> >, boost::signals2::slot<void (), boost::function<void ()> >, boost::signals2::mutex> >::reference boost::iterators::iterator_core_access::dereference<boost::signals2::detail::slot_call_iterator_t<boost::signals2::detail::variadic_slot_invoker<boost::signals2::detail::void_type>, std::_List_iterator<boost::shared_ptr<boost::signals2::detail::connection_body<std::pair<boost::signals2::detail::slot_meta_group, boost::optional<int> >, boost::signals2::slot<void (), boost::function<void ()> >, boost::signals2::mutex> > >, boost::signals2::detail::connection_body<std::pair<boost::signals2::detail::slot_meta_group, boost::optional<int> >, boost::signals2::slot<void (), boost::function<void ()> >, boost::signals2::mutex> > >(boost::signals2::detail::slot_call_iterator_t<boost::signals2::detail::variadic_slot_invoker<boost::signals2::detail::void_type>, std::_List_iterator<boost::shared_ptr<boost::signals2::detail::connection_body<std::pair<boost::signals2::detail::slot_meta_group, boost::optional<int> >, boost::signals2::slot<void (), boost::function<void ()> >, boost::signals2::mutex> > >, boost::signals2::detail::connection_body<std::pair<boost::signals2::detail::slot_meta_group, boost::optional<int> >, boost::signals2::slot<void (), boost::function<void ()> >, boost::signals2::mutex> > const&)" (gdb) n 1364 result = demangledSymbol; (gdb) 1366 free(buffer); (gdb) free(): double free detected in tcache 2

This patch increases the buffer to 4096 bytes.

Edited by Wei Mingzhi

Merge request reports