Package: ladspa-sdk
Version: 1.1-2
Severity: normal
Tags: patch
Running valgrind on a program that uses the sine.so plugin in this package
produces the following errors:
$ valgrind analyseplugin /usr/lib/ladspa/sine.so
....
==10056== Mismatched free() / delete / delete []
==10056== at 0x1B906E4C: operator delete[](void*) (vg_replace_malloc.c:161)
==10056== by 0x1B90C097: (within /usr/lib/ladspa/sine.so)
==10056== by 0x1B974425: __cxa_finalize (in /lib/tls/libc-2.3.2.so)
==10056== by 0x1B90BC94: (within /usr/lib/ladspa/sine.so)
==10056== by 0x1B90C94B: (within /usr/lib/ladspa/sine.so)
==10056== by 0x1BA5268F: _dl_close (in /lib/tls/libc-2.3.2.so)
==10056== by 0x1B9230AB: (within /lib/tls/libdl-2.3.2.so)
==10056== by 0x1B8F0015: _dl_catch_error (in /lib/ld-2.3.2.so)
==10056== by 0x1B9234A5: (within /lib/tls/libdl-2.3.2.so)
==10056== by 0x1B923071: dlclose (in /lib/tls/libdl-2.3.2.so)
==10056== by 0x804954E: (within /usr/bin/analyseplugin)
==10056== by 0x80492A3: (within /usr/bin/analyseplugin)
==10056== Address 0x1BA91FF8 is 0 bytes inside a block of size 10 alloc'd
==10056== at 0x1B90659D: malloc (vg_replace_malloc.c:130)
==10056== by 0x1B9C108F: strdup (in /lib/tls/libc-2.3.2.so)
==10056== by 0x1B90C31E: StartupShutdownHandler::StartupShutdownHandler()
(in /usr/lib/ladspa/sine.so)
==10056== by 0x1B90BD0F: (within /usr/lib/ladspa/sine.so)
==10056== by 0x1B90C0B1: (within /usr/lib/ladspa/sine.so)
==10056== by 0x1B90C928: (within /usr/lib/ladspa/sine.so)
==10056== by 0x1B90BB2C: (within /usr/lib/ladspa/sine.so)
==10056== by 0x1B8F01CD: (within /lib/ld-2.3.2.so)
==10056== by 0x1B8F02B9: _dl_init (in /lib/ld-2.3.2.so)
==10056== by 0x1BA512B1: (within /lib/tls/libc-2.3.2.so)
==10056== by 0x1B8F0015: _dl_catch_error (in /lib/ld-2.3.2.so)
==10056== by 0x1BA50ED5: _dl_open (in /lib/tls/libc-2.3.2.so)
(repeated 10 times)
==10056== Mismatched free() / delete / delete []
==10056== at 0x1B906E4C: operator delete[](void*) (vg_replace_malloc.c:161)
==10056== by 0x1B90C8F6:
StartupShutdownHandler::deleteDescriptor(_LADSPA_Descriptor*) (in
/usr/lib/ladspa/sine.so)
==10056== by 0x1B90BF3E: (within /usr/lib/ladspa/sine.so)
==10056== by 0x1B974425: __cxa_finalize (in /lib/tls/libc-2.3.2.so)
==10056== by 0x1B90BC94: (within /usr/lib/ladspa/sine.so)
==10056== by 0x1B90C94B: (within /usr/lib/ladspa/sine.so)
==10056== by 0x1BA5268F: _dl_close (in /lib/tls/libc-2.3.2.so)
==10056== by 0x1B9230AB: (within /lib/tls/libdl-2.3.2.so)
==10056== by 0x1B8F0015: _dl_catch_error (in /lib/ld-2.3.2.so)
==10056== by 0x1B9234A5: (within /lib/tls/libdl-2.3.2.so)
==10056== by 0x1B923071: dlclose (in /lib/tls/libdl-2.3.2.so)
==10056== by 0x804954E: (within /usr/bin/analyseplugin)
==10056== Address 0x1BA92670 is 0 bytes inside a block of size 10 alloc'd
==10056== at 0x1B90659D: malloc (vg_replace_malloc.c:130)
==10056== by 0x1B9C108F: strdup (in /lib/tls/libc-2.3.2.so)
==10056== by 0x1B90C2C8: StartupShutdownHandler::StartupShutdownHandler()
(in /usr/lib/ladspa/sine.so)
==10056== by 0x1B90BD0F: (within /usr/lib/ladspa/sine.so)
==10056== by 0x1B90C0B1: (within /usr/lib/ladspa/sine.so)
==10056== by 0x1B90C928: (within /usr/lib/ladspa/sine.so)
==10056== by 0x1B90BB2C: (within /usr/lib/ladspa/sine.so)
==10056== by 0x1B8F01CD: (within /lib/ld-2.3.2.so)
==10056== by 0x1B8F02B9: _dl_init (in /lib/ld-2.3.2.so)
==10056== by 0x1BA512B1: (within /lib/tls/libc-2.3.2.so)
==10056== by 0x1B8F0015: _dl_catch_error (in /lib/ld-2.3.2.so)
==10056== by 0x1BA50ED5: _dl_open (in /lib/tls/libc-2.3.2.so)
(repeated 10 times)
==10056==
==10056== ERROR SUMMARY: 28 errors from 20 contexts (suppressed: 27 from 1)
==10056== malloc/free: in use at exit: 0 bytes in 0 blocks.
==10056== malloc/free: 60 allocs, 60 frees, 69163 bytes allocated.
==10056== For counts of detected errors, rerun with: -v
==10056== No malloc'd blocks -- no leaks are possible.
This is due to the plugin allocating strings with strdup, but freeing them
with delete[]. The attached patch fixes this, using free() to free the strings.
-- System Information:
Debian Release: 3.1
Architecture: i386 (i686)
Kernel: Linux 2.6.11.12
Locale: LANG=en_GB, LC_CTYPE=en_GB (charmap=ISO-8859-1)
Versions of packages ladspa-sdk depends on:
ii libc6 2.3.2.ds1-22 GNU C Library: Shared libraries an
ii libgcc1 1:3.4.3-13 GCC support library
ii libstdc++5 1:3.3.5-13 The GNU Standard C++ Library v3
-- no debconf information
--- ladspa_sdk/src/plugins/sine.cpp 2002-07-06 18:23:17.000000000 +0100
+++ ladspa_sdk-fix/src/plugins/sine.cpp 2005-12-05 21:14:22.000000000 +0000
@@ -333,13 +333,13 @@
void deleteDescriptor(LADSPA_Descriptor * psDescriptor) {
unsigned long lIndex;
if (psDescriptor) {
- delete [] psDescriptor->Label;
- delete [] psDescriptor->Name;
- delete [] psDescriptor->Maker;
- delete [] psDescriptor->Copyright;
+ free((char *)psDescriptor->Label);
+ free((char *)psDescriptor->Name);
+ free((char *)psDescriptor->Maker);
+ free((char *)psDescriptor->Copyright);
delete [] psDescriptor->PortDescriptors;
for (lIndex = 0; lIndex < psDescriptor->PortCount; lIndex++)
- delete [] psDescriptor->PortNames[lIndex];
+ free((char *)psDescriptor->PortNames[lIndex]);
delete [] psDescriptor->PortNames;
delete [] psDescriptor->PortRangeHints;
delete psDescriptor;