Attached is part of a Valgrind log (the full log is 1MB, let me know if
you want to go leak hunting). I was trying to investigate
https://www.lyx.org/trac/ticket/12510. I get the Valgrind message when
opening probability8.lyx on that ticket.

Also attached is a possible patch that fixes this particular invalid
read. However, I have no idea why the unpatched code triggers an invalid
read, nor why the patch would fix it.

Does anyone have an idea?

Scott
==2365082== Memcheck, a memory error detector
==2365082== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==2365082== Using Valgrind-3.17.0 and LibVEX; rerun with -h for copyright info
==2365082== Command: /home/scott/lyxbuilds/master/CMakeBuild/bin/lyx -userdir 
/home/scott/lyxbuilds/master/user-dir probability8.lyx
==2365082== Parent PID: 2359215
==2365082== 
==2365082== Invalid read of size 32
==2365082==    at 0x617DB5D: __wmemcmp_avx2_movbe (memcmp-avx2-movbe.S:413)
==2365082==    by 0x8EDEF8: std::char_traits<wchar_t>::compare(wchar_t const*, 
wchar_t const*, unsigned long) (char_traits.h:485)
==2365082==    by 0x90C9B5: std::__cxx11::basic_string<wchar_t, 
std::char_traits<wchar_t>, std::allocator<wchar_t> 
>::compare(std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, 
std::allocator<wchar_t> > const&) const (basic_string.h:2878)
==2365082==    by 0x908D50: 
_ZStssIwSt11char_traitsIwESaIwEEDTcl21__char_traits_cmp_catIT0_ELi0EEERKNSt7__cxx1112basic_stringIT_S3_T1_EESB_
 (basic_string.h:6263)
==2365082==    by 0x909708: std::less<std::__cxx11::basic_string<wchar_t, 
std::char_traits<wchar_t>, std::allocator<wchar_t> > 
>::operator()(std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, 
std::allocator<wchar_t> > const&, std::__cxx11::basic_string<wchar_t, 
std::char_traits<wchar_t>, std::allocator<wchar_t> > const&) const 
(stl_function.h:386)
==2365082==    by 0xD8F847: std::_Rb_tree<std::__cxx11::basic_string<wchar_t, 
std::char_traits<wchar_t>, std::allocator<wchar_t> >, 
std::pair<std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, 
std::allocator<wchar_t> > const, lyx::(anonymous namespace)::deco_struct>, 
std::_Select1st<std::pair<std::__cxx11::basic_string<wchar_t, 
std::char_traits<wchar_t>, std::allocator<wchar_t> > const, lyx::(anonymous 
namespace)::deco_struct> >, std::less<std::__cxx11::basic_string<wchar_t, 
std::char_traits<wchar_t>, std::allocator<wchar_t> > >, 
std::allocator<std::pair<std::__cxx11::basic_string<wchar_t, 
std::char_traits<wchar_t>, std::allocator<wchar_t> > const, lyx::(anonymous 
namespace)::deco_struct> > 
>::_M_get_insert_hint_unique_pos(std::_Rb_tree_const_iterator<std::pair<std::__cxx11::basic_string<wchar_t,
 std::char_traits<wchar_t>, std::allocator<wchar_t> > const, lyx::(anonymous 
namespace)::deco_struct> >, std::__cxx11::basic_string<wchar_t, 
std::char_traits<wchar_t>, std::allocator<wchar_t> > const&) (stl_tree.h:2177)
==2365082==    by 0xD8F3CE: 
std::_Rb_tree_iterator<std::pair<std::__cxx11::basic_string<wchar_t, 
std::char_traits<wchar_t>, std::allocator<wchar_t> > const, lyx::(anonymous 
namespace)::deco_struct> > std::_Rb_tree<std::__cxx11::basic_string<wchar_t, 
std::char_traits<wchar_t>, std::allocator<wchar_t> >, 
std::pair<std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, 
std::allocator<wchar_t> > const, lyx::(anonymous namespace)::deco_struct>, 
std::_Select1st<std::pair<std::__cxx11::basic_string<wchar_t, 
std::char_traits<wchar_t>, std::allocator<wchar_t> > const, lyx::(anonymous 
namespace)::deco_struct> >, std::less<std::__cxx11::basic_string<wchar_t, 
std::char_traits<wchar_t>, std::allocator<wchar_t> > >, 
std::allocator<std::pair<std::__cxx11::basic_string<wchar_t, 
std::char_traits<wchar_t>, std::allocator<wchar_t> > const, lyx::(anonymous 
namespace)::deco_struct> > >::_M_emplace_hint_unique<std::piecewise_construct_t 
const&, std::tuple<std::__cxx11::basic_string<wchar_t, 
std::char_traits<wchar_t>, std::allocator<wchar_t> > const&>, std::tuple<> 
>(std::_Rb_tree_const_iterator<std::pair<std::__cxx11::basic_string<wchar_t, 
std::char_traits<wchar_t>, std::allocator<wchar_t> > const, lyx::(anonymous 
namespace)::deco_struct> >, std::piecewise_construct_t const&, 
std::tuple<std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, 
std::allocator<wchar_t> > const&>&&, std::tuple<>&&) (stl_tree.h:2433)
==2365082==    by 0xD8F143: std::map<std::__cxx11::basic_string<wchar_t, 
std::char_traits<wchar_t>, std::allocator<wchar_t> >, lyx::(anonymous 
namespace)::deco_struct, std::less<std::__cxx11::basic_string<wchar_t, 
std::char_traits<wchar_t>, std::allocator<wchar_t> > >, 
std::allocator<std::pair<std::__cxx11::basic_string<wchar_t, 
std::char_traits<wchar_t>, std::allocator<wchar_t> > const, lyx::(anonymous 
namespace)::deco_struct> > >::operator[](std::__cxx11::basic_string<wchar_t, 
std::char_traits<wchar_t>, std::allocator<wchar_t> > const&) (stl_map.h:501)
==2365082==    by 0xD8C26D: lyx::(anonymous 
namespace)::init_deco_table::init_deco_table() (MathSupport.cpp:536)
==2365082==    by 0xD9065B: __static_initialization_and_destruction_0(int, int) 
(MathSupport.cpp:541)
==2365082==    by 0xD91B0A: _GLOBAL__sub_I_MathSupport.cpp 
(MathSupport.cpp:1120)
==2365082==    by 0x60080FC: call_init (libc-start.c:145)
==2365082==    by 0x60080FC: __libc_start_main@@GLIBC_2.34 (libc-start.c:379)
==2365082==  Address 0x8b28cb0 is 0 bytes inside a block of size 28 alloc'd
==2365082==    at 0x4843FB3: operator new(unsigned long) (in 
/usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==2365082==    by 0x8F1469: 
__gnu_cxx::new_allocator<wchar_t>::allocate(unsigned long, void const*) 
(new_allocator.h:127)
==2365082==    by 0x8EF91E: allocate (allocator.h:197)
==2365082==    by 0x8EF91E: std::allocator_traits<std::allocator<wchar_t> 
>::allocate(std::allocator<wchar_t>&, unsigned long) (alloc_traits.h:460)
==2365082==    by 0x8F1533: std::__cxx11::basic_string<wchar_t, 
std::char_traits<wchar_t>, std::allocator<wchar_t> >::_M_create(unsigned long&, 
unsigned long) (basic_string.tcc:153)
==2365082==    by 0x8F112E: void std::__cxx11::basic_string<wchar_t, 
std::char_traits<wchar_t>, std::allocator<wchar_t> 
>::_M_construct<wchar_t*>(wchar_t*, wchar_t*, std::forward_iterator_tag) 
(basic_string.tcc:219)
==2365082==    by 0x8F061B: void std::__cxx11::basic_string<wchar_t, 
std::char_traits<wchar_t>, std::allocator<wchar_t> 
>::_M_construct_aux<wchar_t*>(wchar_t*, wchar_t*, std::__false_type) 
(basic_string.h:255)
==2365082==    by 0x8EF5C2: void std::__cxx11::basic_string<wchar_t, 
std::char_traits<wchar_t>, std::allocator<wchar_t> 
>::_M_construct<wchar_t*>(wchar_t*, wchar_t*) (basic_string.h:274)
==2365082==    by 0x8EE7A9: std::__cxx11::basic_string<wchar_t, 
std::char_traits<wchar_t>, std::allocator<wchar_t> 
>::basic_string(std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, 
std::allocator<wchar_t> > const&) (basic_string.h:459)
==2365082==    by 0xD9046D: std::pair<std::__cxx11::basic_string<wchar_t, 
std::char_traits<wchar_t>, std::allocator<wchar_t> > const, lyx::(anonymous 
namespace)::deco_struct>::pair<std::__cxx11::basic_string<wchar_t, 
std::char_traits<wchar_t>, std::allocator<wchar_t> > const&, 0ul, 
>(std::tuple<std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, 
std::allocator<wchar_t> > const&>&, std::tuple<>&, std::_Index_tuple<0ul>, 
std::_Index_tuple<>) (tuple:1808)
==2365082==    by 0xD904B2: std::pair<std::__cxx11::basic_string<wchar_t, 
std::char_traits<wchar_t>, std::allocator<wchar_t> > const, lyx::(anonymous 
namespace)::deco_struct>::pair<std::__cxx11::basic_string<wchar_t, 
std::char_traits<wchar_t>, std::allocator<wchar_t> > 
const&>(std::piecewise_construct_t, 
std::tuple<std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, 
std::allocator<wchar_t> > const&>, std::tuple<>) (tuple:1798)
==2365082==    by 0xD902C6: decltype (::new ((void*)(0)) 
std::pair<std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, 
std::allocator<wchar_t> > const, lyx::(anonymous 
namespace)::deco_struct>((declval<std::piecewise_construct_t const&>)(), 
(declval<std::tuple<std::__cxx11::basic_string<wchar_t, 
std::char_traits<wchar_t>, std::allocator<wchar_t> > const&> >)(), 
(declval<std::tuple<> >)())) 
std::construct_at<std::pair<std::__cxx11::basic_string<wchar_t, 
std::char_traits<wchar_t>, std::allocator<wchar_t> > const, lyx::(anonymous 
namespace)::deco_struct>, std::piecewise_construct_t const&, 
std::tuple<std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, 
std::allocator<wchar_t> > const&>, std::tuple<> 
>(std::pair<std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, 
std::allocator<wchar_t> > const, lyx::(anonymous namespace)::deco_struct>*, 
std::piecewise_construct_t const&, 
std::tuple<std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, 
std::allocator<wchar_t> > const&>&&, std::tuple<>&&) (stl_construct.h:97)
==2365082==    by 0xD90365: void 
std::allocator_traits<std::allocator<std::_Rb_tree_node<std::pair<std::__cxx11::basic_string<wchar_t,
 std::char_traits<wchar_t>, std::allocator<wchar_t> > const, lyx::(anonymous 
namespace)::deco_struct> > > 
>::construct<std::pair<std::__cxx11::basic_string<wchar_t, 
std::char_traits<wchar_t>, std::allocator<wchar_t> > const, lyx::(anonymous 
namespace)::deco_struct>, std::piecewise_construct_t const&, 
std::tuple<std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, 
std::allocator<wchar_t> > const&>, std::tuple<> 
>(std::allocator<std::_Rb_tree_node<std::pair<std::__cxx11::basic_string<wchar_t,
 std::char_traits<wchar_t>, std::allocator<wchar_t> > const, lyx::(anonymous 
namespace)::deco_struct> > >&, std::pair<std::__cxx11::basic_string<wchar_t, 
std::char_traits<wchar_t>, std::allocator<wchar_t> > const, lyx::(anonymous 
namespace)::deco_struct>*, std::piecewise_construct_t const&, 
std::tuple<std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, 
std::allocator<wchar_t> > const&>&&, std::tuple<>&&) (alloc_traits.h:514)
==2365082== 
==2365082== Invalid read of size 32
==2365082==    at 0x617DB59: __wmemcmp_avx2_movbe (memcmp-avx2-movbe.S:412)
==2365082==    by 0x8EDEF8: std::char_traits<wchar_t>::compare(wchar_t const*, 
wchar_t const*, unsigned long) (char_traits.h:485)
==2365082==    by 0x90C9B5: std::__cxx11::basic_string<wchar_t, 
std::char_traits<wchar_t>, std::allocator<wchar_t> 
>::compare(std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, 
std::allocator<wchar_t> > const&) const (basic_string.h:2878)
==2365082==    by 0x908D50: 
_ZStssIwSt11char_traitsIwESaIwEEDTcl21__char_traits_cmp_catIT0_ELi0EEERKNSt7__cxx1112basic_stringIT_S3_T1_EESB_
 (basic_string.h:6263)
==2365082==    by 0x909708: std::less<std::__cxx11::basic_string<wchar_t, 
std::char_traits<wchar_t>, std::allocator<wchar_t> > 
>::operator()(std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, 
std::allocator<wchar_t> > const&, std::__cxx11::basic_string<wchar_t, 
std::char_traits<wchar_t>, std::allocator<wchar_t> > const&) const 
(stl_function.h:386)
==2365082==    by 0xD8FC8C: std::_Rb_tree<std::__cxx11::basic_string<wchar_t, 
std::char_traits<wchar_t>, std::allocator<wchar_t> >, 
std::pair<std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, 
std::allocator<wchar_t> > const, lyx::(anonymous namespace)::deco_struct>, 
std::_Select1st<std::pair<std::__cxx11::basic_string<wchar_t, 
std::char_traits<wchar_t>, std::allocator<wchar_t> > const, lyx::(anonymous 
namespace)::deco_struct> >, std::less<std::__cxx11::basic_string<wchar_t, 
std::char_traits<wchar_t>, std::allocator<wchar_t> > >, 
std::allocator<std::pair<std::__cxx11::basic_string<wchar_t, 
std::char_traits<wchar_t>, std::allocator<wchar_t> > const, lyx::(anonymous 
namespace)::deco_struct> > 
>::_M_lower_bound(std::_Rb_tree_node<std::pair<std::__cxx11::basic_string<wchar_t,
 std::char_traits<wchar_t>, std::allocator<wchar_t> > const, lyx::(anonymous 
namespace)::deco_struct> >*, std::_Rb_tree_node_base*, 
std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, 
std::allocator<wchar_t> > const&) (stl_tree.h:1903)
==2365082==    by 0xD8F67E: std::_Rb_tree<std::__cxx11::basic_string<wchar_t, 
std::char_traits<wchar_t>, std::allocator<wchar_t> >, 
std::pair<std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, 
std::allocator<wchar_t> > const, lyx::(anonymous namespace)::deco_struct>, 
std::_Select1st<std::pair<std::__cxx11::basic_string<wchar_t, 
std::char_traits<wchar_t>, std::allocator<wchar_t> > const, lyx::(anonymous 
namespace)::deco_struct> >, std::less<std::__cxx11::basic_string<wchar_t, 
std::char_traits<wchar_t>, std::allocator<wchar_t> > >, 
std::allocator<std::pair<std::__cxx11::basic_string<wchar_t, 
std::char_traits<wchar_t>, std::allocator<wchar_t> > const, lyx::(anonymous 
namespace)::deco_struct> > >::lower_bound(std::__cxx11::basic_string<wchar_t, 
std::char_traits<wchar_t>, std::allocator<wchar_t> > const&) (stl_tree.h:1270)
==2365082==    by 0xD8F2D2: std::map<std::__cxx11::basic_string<wchar_t, 
std::char_traits<wchar_t>, std::allocator<wchar_t> >, lyx::(anonymous 
namespace)::deco_struct, std::less<std::__cxx11::basic_string<wchar_t, 
std::char_traits<wchar_t>, std::allocator<wchar_t> > >, 
std::allocator<std::pair<std::__cxx11::basic_string<wchar_t, 
std::char_traits<wchar_t>, std::allocator<wchar_t> > const, lyx::(anonymous 
namespace)::deco_struct> > >::lower_bound(std::__cxx11::basic_string<wchar_t, 
std::char_traits<wchar_t>, std::allocator<wchar_t> > const&) (stl_map.h:1259)
==2365082==    by 0xD8F088: std::map<std::__cxx11::basic_string<wchar_t, 
std::char_traits<wchar_t>, std::allocator<wchar_t> >, lyx::(anonymous 
namespace)::deco_struct, std::less<std::__cxx11::basic_string<wchar_t, 
std::char_traits<wchar_t>, std::allocator<wchar_t> > >, 
std::allocator<std::pair<std::__cxx11::basic_string<wchar_t, 
std::char_traits<wchar_t>, std::allocator<wchar_t> > const, lyx::(anonymous 
namespace)::deco_struct> > >::operator[](std::__cxx11::basic_string<wchar_t, 
std::char_traits<wchar_t>, std::allocator<wchar_t> > const&) (stl_map.h:497)
==2365082==    by 0xD8C26D: lyx::(anonymous 
namespace)::init_deco_table::init_deco_table() (MathSupport.cpp:536)
==2365082==    by 0xD9065B: __static_initialization_and_destruction_0(int, int) 
(MathSupport.cpp:541)
==2365082==    by 0xD91B0A: _GLOBAL__sub_I_MathSupport.cpp 
(MathSupport.cpp:1120)
==2365082==  Address 0x8b28f50 is 0 bytes inside a block of size 28 alloc'd
==2365082==    at 0x4843FB3: operator new(unsigned long) (in 
/usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==2365082==    by 0x8F1469: 
__gnu_cxx::new_allocator<wchar_t>::allocate(unsigned long, void const*) 
(new_allocator.h:127)
==2365082==    by 0x8EF91E: allocate (allocator.h:197)
==2365082==    by 0x8EF91E: std::allocator_traits<std::allocator<wchar_t> 
>::allocate(std::allocator<wchar_t>&, unsigned long) (alloc_traits.h:460)
==2365082==    by 0x8F1533: std::__cxx11::basic_string<wchar_t, 
std::char_traits<wchar_t>, std::allocator<wchar_t> >::_M_create(unsigned long&, 
unsigned long) (basic_string.tcc:153)
==2365082==    by 0x8F12F1: std::__cxx11::basic_string<wchar_t, 
std::char_traits<wchar_t>, std::allocator<wchar_t> >::_M_mutate(unsigned long, 
unsigned long, wchar_t const*, unsigned long) (basic_string.tcc:307)
==2365082==    by 0x90F206: std::__cxx11::basic_string<wchar_t, 
std::char_traits<wchar_t>, std::allocator<wchar_t> >::_M_replace_aux(unsigned 
long, unsigned long, unsigned long, wchar_t) (basic_string.tcc:437)
==2365082==    by 0x90B295: std::__cxx11::basic_string<wchar_t, 
std::char_traits<wchar_t>, std::allocator<wchar_t> >::append(unsigned long, 
wchar_t) (basic_string.h:1272)
==2365082==    by 0xA8BA63: std::__cxx11::basic_string<wchar_t, 
std::char_traits<wchar_t>, std::allocator<wchar_t> >::resize(unsigned long, 
wchar_t) (basic_string.tcc:377)
==2365082==    by 0xA8A4A5: std::__cxx11::basic_string<wchar_t, 
std::char_traits<wchar_t>, std::allocator<wchar_t> >::resize(unsigned long) 
(basic_string.h:958)
==2365082==    by 0x12B26B7: lyx::from_ascii[abi:cxx11](char const*) 
(docstring.cpp:39)
==2365082==    by 0xD8C257: lyx::(anonymous 
namespace)::init_deco_table::init_deco_table() (MathSupport.cpp:536)
==2365082==    by 0xD9065B: __static_initialization_and_destruction_0(int, int) 
(MathSupport.cpp:541)
diff --git a/src/mathed/MathSupport.cpp b/src/mathed/MathSupport.cpp
index 16019205f1..44271e4516 100644
--- a/src/mathed/MathSupport.cpp
+++ b/src/mathed/MathSupport.cpp
@@ -524,6 +524,7 @@ named_deco_struct deco_table[] = {
 
 map<docstring, deco_struct> deco_list;
 
 // sort the table on startup
 class init_deco_table {
 public:
@@ -533,7 +534,8 @@ public:
 			deco_struct d;
 			d.data  = p->data;
 			d.angle = p->angle;
-			deco_list[from_ascii(p->name)] = d;
+			docstring d_name = from_ascii(p->name);
+			deco_list[d_name] = d;
 		}
 	}
 };

Attachment: signature.asc
Description: PGP signature

-- 
lyx-devel mailing list
lyx-devel@lists.lyx.org
http://lists.lyx.org/mailman/listinfo/lyx-devel

Reply via email to