Daemon icon indicating copy to clipboard operation
Daemon copied to clipboard

Some leaks in Command code reported by heapusage

Open illwieckz opened this issue 2 years ago • 1 comments

Reported by heapusage:

==260621== 32 bytes in 1 block(s) are lost, originally allocated at:
==260621==    at 0x00007f6c2ff024fc: malloc (humain.cpp:175)
==260621==    at 0x0000560feb4e4355: operator new(unsigned long) (System.cpp:414)
==260621==    at 0x0000560feb459f8a: std::__new_allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >::allocate(unsigned long, void const*) (new_allocator.h:138)
==260621==    at 0x0000560feb452d26: std::allocator_traits<std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >::allocate(std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >&, unsigned long) (alloc_traits.h:464)
==260621==    at 0x0000560feb44c922: std::_Vector_base<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >::_M_allocate(unsigned long) (stl_vector.h:378)
==260621==    at 0x0000560feb44602f: void std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >::_M_realloc_insert<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(__gnu_cxx::__normal_iterator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&&) (vector.tcc:453)
==260621==    at 0x0000560feb442738: void std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >::emplace_back<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&&) (vector.tcc:127)
==260621==    at 0x0000560feb43fe3c: std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >::push_back(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&&) (stl_vector.h:1294)
==260621==    at 0x0000560feb49ee7c: Cmd::Args::Args(Str::BasicStringRef<char>) (Command.cpp:346)
==260621==    at 0x0000560feb51e2c1: Cmd::ExecuteCommand(Str::BasicStringRef<char>, bool, Cmd::Environment*) (CommandSystem.cpp:202)
==260621==    at 0x0000560feb51db89: Cmd::ExecuteCommandBuffer() (CommandSystem.cpp:94)
==260621==    at 0x0000560feb3b009a: Com_Frame() (common.cpp:995)
==260621==    at 0x0000560feb3a8e83: Application::ClientApplication::Frame() (ClientApplication.cpp:90)
==260621==    at 0x0000560feb50e55f: Application::Frame() (Application.cpp:76)
==260621==    at 0x0000560feb54f80d: main (System.cpp:785)
==260621==    at 0x00007f6c2f623510: __libc_start_call_main (libc_start_call_main.h:74)
==260621==    at 0x00007f6c2f6235c9: __libc_start_main@@GLIBC_2.34 (libc-start.c:128)
==260621==    at 0x0000560feb3a7365: _start

illwieckz avatar May 24 '23 22:05 illwieckz

I think std::move is wrong here. Pretty sure you can't use push_back() after moving the string.

VReaperV avatar Aug 13 '25 14:08 VReaperV