[Libreoffice] [Bug 42865] MySQL native driver: free() on non-heap pointer; in debug mode abort()

Lionel Elie Mamane lionel at mamane.lu
Mon Nov 14 02:44:47 PST 2011


On Mon, Nov 14, 2011 at 10:47:31AM +0100, Stephan Bergmann wrote:

> I must admit I'm confused.  On my system,

> >~ objdump -T /usr/lib64/libstdc++.so.6 | grep _ZNSs4_Rep20_S_empty_rep_storageE
> >0000003e504f45a0 g    DO .bss  0000000000000020 GLIBCXX_3.4 _ZNSs4_Rep20_S_empty_rep_storageE
> >
> >~ objdump -T /usr/lib64/libmysqlcppconn.so | grep _ZNSs4_Rep20_S_empty_rep_storageE
> >0000000000000000      DO *UND* 0000000000000000 GLIBCXX_3.4 _ZNSs4_Rep20_S_empty_rep_storageE
> >
> >~ objdump -t mysqlc/unxlngx6/lib/mysqlc.uno.so | grep _ZNSs4_Rep20_S_empty_rep_storageE
> >00000000003dbe40 l     O .bss  0000000000000020             _ZNSs4_Rep20_S_empty_rep_storageE

> That is, libstdc++.so.6 exports the symbol with version GLIBCXX_3.4
> and libmysqlcppconn.so links against it, while mysqlc.uno.so emits
> its own definition of the symbol (as a local symbol, due to the map
> file).  Do you have an idea why mysqlc.uno.so emits its own
> definition at all?

Now that you mention it, my *system* libmysqlcppconn.so also links
against the symbol:

$ objdump -T /usr/lib/libmysqlcppconn.so|grep _rep_st
0000000000000000      DO *UND*	0000000000000000  GLIBCXX_3.4 _ZNSs4_Rep20_S_empty_rep_storageE

But the LibreOffice-*internal* libmysqlcppconn defines the symbol as
"globally unique":

$ objdump -T ~/src/libreoffice/core/mysqlcppconn/unxlngx6/lib/libmysqlcppconn.so|grep _rep_st
000000000031bca0 u    DO .bss	0000000000000020  Base        _ZNSs4_Rep20_S_empty_rep_storageE


Hmm... Maybe it is a question of different version of G++/libstdc++,
but on my system, libmysqlcppconn.so defines symbol itself as "u". Or
would that be a change introduced by -D_GLIBCXX_DEBUG? Now, the weird
thing is that if I recompile my distro's libmysqlcppconn package, that
symbol disappears *completely*:

$ objdump -T ~/src/mysqlcppconn/mysql-connector-c++-1.1.0/debian/libmysqlcppconn5/usr/lib/libmysqlcppconn.so.5.1.1.0 | grep -i _rep_st
$


Also compare:

$ ldd ~/src/libreoffice/core/mysqlcppconn/unxlngx6/lib/libmysqlcppconn.so
	linux-vdso.so.1 =>  (0x00007fff89fef000)
	libmysqlclient.so.16 => /usr/lib/libmysqlclient.so.16 (0x00007f4de8623000)
	libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f4de8407000)
	libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f4de8102000)
	libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f4de7e80000)
	libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f4de7c6a000)
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f4de78e5000)
	libcrypt.so.1 => /lib/x86_64-linux-gnu/libcrypt.so.1 (0x00007f4de76ae000)
	libnsl.so.1 => /lib/x86_64-linux-gnu/libnsl.so.1 (0x00007f4de7496000)
	libz.so.1 => /usr/lib/libz.so.1 (0x00007f4de727e000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f4de8d77000)

$ ldd ~/src/mysqlcppconn/mysql-connector-c++-1.1.0/debian/libmysqlcppconn5/usr/lib/libmysqlcppconn.so.5.1.1.0
	linux-vdso.so.1 =>  (0x00007fff72ca9000)
	libmysqlclient_r.so.16 => /usr/lib/libmysqlclient_r.so.16 (0x00007f7898da5000)
	libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f7898aa1000)
	libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f789881e000)
	libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f7898608000)
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f7898284000)
	libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f7898067000)
	libcrypt.so.1 => /lib/x86_64-linux-gnu/libcrypt.so.1 (0x00007f7897e30000)
	libnsl.so.1 => /lib/x86_64-linux-gnu/libnsl.so.1 (0x00007f7897c18000)
	libz.so.1 => /usr/lib/libz.so.1 (0x00007f7897a00000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f78994f4000)

$ ldd /usr/lib/libmysqlcppconn.so.5.1.1.0 
	linux-vdso.so.1 =>  (0x00007fff1f4c3000)
	libmysqlclient_r.so.16 => /usr/lib/libmysqlclient_r.so.16 (0x00007f7e9f79a000)
	libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f7e9f496000)
	libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f7e9f213000)
	libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f7e9effd000)
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f7e9ec79000)
	libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f7e9ea5c000)
	libcrypt.so.1 => /lib/x86_64-linux-gnu/libcrypt.so.1 (0x00007f7e9e825000)
	libnsl.so.1 => /lib/x86_64-linux-gnu/libnsl.so.1 (0x00007f7e9e60d000)
	libz.so.1 => /usr/lib/libz.so.1 (0x00007f7e9e3f5000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f7e9fe77000)


libpthread disappearing, libmysqlclient_r.so.16 vs
libmysqlclient.so.16...


-- 
Lionel


More information about the LibreOffice mailing list