I'm happy to report I seem to have found a
solution.
I'll reveal it, and humbly suggest improvements to
debian's package recommendations and suggestions.
The important lines in valgring's copious output
appear to be
==5040== Invalid free() / delete / delete[] / realloc()
==5040== at 0x482F978: operator delete(void*)
(coregrind/m_replacemalloc/vg_replace_malloc.c:576)
==5040== by 0x54D3504: deallocate
(/build/gcc-7-2ld3ob/gcc-7-7.2.0/build/i686-linux-gnu/libstdc++-v3/include/ext/new_allocator.h:125)
==5040== by 0x54D3504: deallocate
(/build/gcc-7-2ld3ob/gcc-7-7.2.0/build/i686-linux-gnu/libstdc++-v3/include/bits/alloc_traits.h:462)
==5040== by 0x54D3504: _M_destroy
(/build/gcc-7-2ld3ob/gcc-7-7.2.0/build/i686-linux-gnu/libstdc++-v3/include/bits/basic_string.h:226)
==5040== by 0x54D3504: _M_dispose
(/build/gcc-7-2ld3ob/gcc-7-7.2.0/build/i686-linux-gnu/libstdc++-v3/include/bits/basic_string.h:221)
==5040== by 0x54D3504: std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> >::~basic_string()
(/build/gcc-7-2ld3ob/gcc-7-7.2.0/build/i686-linux-gnu/libstdc++-v3/include/bits/basic_string.h:647)
==5040== by 0x491A7AA: __run_exit_handlers
(/build/glibc-EGkrdO/glibc-2.24/stdlib/exit.c:83)
==5040== by 0x491A810: exit
(/build/glibc-EGkrdO/glibc-2.24/stdlib/exit.c:105)
==5040== by 0x4904291: (below main)
(/build/glibc-EGkrdO/glibc-2.24/csu/../csu/libc-start.c:325)
==5040== Address 0x4e13250 is 0 bytes inside a block of size 25 free'd
==5040== at 0x482F978: operator delete(void*)
(coregrind/m_replacemalloc/vg_replace_malloc.c:576)
==5040== by 0x54D3504: deallocate
(/build/gcc-7-2ld3ob/gcc-7-7.2.0/build/i686-linux-gnu/libstdc++-v3/include/ext/new_allocator.h:125)
==5040== by 0x54D3504: deallocate
(/build/gcc-7-2ld3ob/gcc-7-7.2.0/build/i686-linux-gnu/libstdc++-v3/include/bits/alloc_traits.h:462)
==5040== by 0x54D3504: _M_destroy
(/build/gcc-7-2ld3ob/gcc-7-7.2.0/build/i686-linux-gnu/libstdc++-v3/include/bits/basic_string.h:226)
==5040== by 0x54D3504: _M_dispose
(/build/gcc-7-2ld3ob/gcc-7-7.2.0/build/i686-linux-gnu/libstdc++-v3/include/bits/basic_string.h:221)
==5040== by 0x54D3504: std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> >::~basic_string()
(/build/gcc-7-2ld3ob/gcc-7-7.2.0/build/i686-linux-gnu/libstdc++-v3/include/bits/basic_string.h:647)
==5040== by 0x491A7AA: __run_exit_handlers
(/build/glibc-EGkrdO/glibc-2.24/stdlib/exit.c:83)
==5040== by 0x491A810: exit
(/build/glibc-EGkrdO/glibc-2.24/stdlib/exit.c:105)
==5040== by 0x4904291: (below main)
(/build/glibc-EGkrdO/glibc-2.24/csu/../csu/libc-start.c:325)
==5040== Block was alloc'd at
==5040== at 0x482E91C: operator new(unsigned int)
(coregrind/m_replacemalloc/vg_replace_malloc.c:328)
==5040== by 0x54D2C2B: allocate
(/build/gcc-7-2ld3ob/gcc-7-7.2.0/build/i686-linux-gnu/libstdc++-v3/include/ext/new_allocator.h:111)
==5040== by 0x54D2C2B: allocate
(/build/gcc-7-2ld3ob/gcc-7-7.2.0/build/i686-linux-gnu/libstdc++-v3/include/bits/alloc_traits.h:436)
==5040== by 0x54D2C2B: std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> >::_M_create(unsigned int&,
unsigned int)
(/build/gcc-7-2ld3ob/gcc-7-7.2.0/build/i686-linux-gnu/libstdc++-v3/include/bits/basic_string.tcc:153)
==5040== by 0x17FBEDDB: void std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> >::_M_construct<char*>(char*,
char*, std::forward_iterator_tag) [clone .isra.25]
(/usr/include/c++/7/bits/basic_string.tcc:219)
==5040== by 0x17F01878: __static_initialization_and_destruction_0
(./D4AsyncUtil.cc:23)
==5040== by 0x17F01878: _GLOBAL__sub_I_D4AsyncUtil.cc
(./D4AsyncUtil.cc:357)
==5040== by 0x400FC54: call_init.part.0
(/build/glibc-EGkrdO/glibc-2.24/elf/dl-init.c:72)
==5040== by 0x400FD7D: call_init
(/build/glibc-EGkrdO/glibc-2.24/elf/dl-init.c:30)
==5040== by 0x400FD7D: _dl_init
(/build/glibc-EGkrdO/glibc-2.24/elf/dl-init.c:120)
==5040== by 0x4013F56: dl_open_worker
(/build/glibc-EGkrdO/glibc-2.24/elf/dl-open.c:575)
==5040== by 0x400FB00: _dl_catch_error
(/build/glibc-EGkrdO/glibc-2.24/elf/dl-error.c:187)
==5040== by 0x4013748: _dl_open
(/build/glibc-EGkrdO/glibc-2.24/elf/dl-open.c:660)
==5040== by 0x4AA3BF4: dlopen_doit
(/build/glibc-EGkrdO/glibc-2.24/dlfcn/dlopen.c:66)
==5040== by 0x400FB00: _dl_catch_error
(/build/glibc-EGkrdO/glibc-2.24/elf/dl-error.c:187)
==5040== by 0x4AA42EC: _dlerror_run
(/build/glibc-EGkrdO/glibc-2.24/dlfcn/dlerror.c:163)
These show
the bogus second delete() on line 2,
the legit delete() on the 12th line, and
the memory originally being allocated by D4AsyncUtil.cc on the 10th line
from the bottom.
D4AsyncUtil.cc is part of libdap.
Upgrading these libdap packages
libdapclient6v5:i386 from 3.15.1-1 to 3.19.1-1
and
libdapserver7v5:i386 from 3.15.1-1 to 3.19.1-1
seems to have fixed the bug!
As you can see in valgrind's output,
D4AsyncUtil.cc/libdap is called dynamically.
So, I don't know for sure which code originated the
call, but
1.) $ apt-rdepends -r libdapclient6v5
and
$ apt-rdepends -r libdapserver7v5
reveal that
libgdal20 (2.2.2+dfsg-2+b3) depends on both,
libopencv-imgcodecs3.2 depends on libgdal20 (>= 2.0.1) and
frei0r-plugins (1.6.1-1+b1) depends on libopencv-imgcodecs3.2
2.) the kdenlive pacakges recommends frei0r-plugins, but doesn't specify a
minimum version, and
3.) frei0r's web site
(https://www.dyne.org/software/frei0r/) says
they're also used by ffmpeg.
I humbly suggest improving the package descriptions of
frei0r-plugins: to depend on at least version
3.2.0+dfsg-4 of
libopencv-imgcodecs3.2 and
libgdal20: to depend on at least version
3.19.1-1 of libdapclient6v5
and libdapserver7v5.
If you agree, maybe you could reassign this bug
report to the appropriate package(s).
Thanks,
Kingsley
--
Time is the fire in which we all burn.