Automatic CDDB search causes segfault with LANG=ja_JP.UTF-8 and "freedb.freedb.org" server
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
easytag |
Fix Released
|
Undecided
|
Unassigned | ||
easytag (Ubuntu) |
Fix Released
|
Medium
|
Unassigned |
Bug Description
Binary package hint: easytag
Automatic CDDB search causes segfault when LANG is ja_JP.UTF-8 and the CDDB servers include "freedb.
1)
$ lsb_release -rd
Description: Ubuntu 10.04.1 LTS
Release: 10.04
2)
$ LANG=C apt-cache policy easytag
easytag:
Installed: 2.1.6-1ubuntu1
Candidate: 2.1.6-1ubuntu1
Version table:
*** 2.1.6-1ubuntu1 0
500 http://
100 /var/lib/
3) What to be expected to happen:
Automatic CDDB search is done successfully.
4) What happened instead:
Automatic CDDB search causes segfault.
$ grep cddb_server_name ~/.easytag/
cddb_server_
cddb_server_
cddb_server_
$ LANG=ja_JP.UTF-8 easytag
EasyTAG 2.1.6: 異常終了しました! (PID: 1637).
シグナル SIGSEGV (11) を受け取りました
EasyTAG でバグと思われるものが見つかり
Segmentation fault
$ dmesg | tail -1
[ 714.935664] easytag[1637]: segfault at 38 ip 00faf50b sp bfa04d2c error 4 in libc-2.
$ gdb -q easytag
Reading symbols from /usr/bin/
(gdb) run
Starting program: /usr/bin/easytag
[Thread debugging using libthread_db enabled]
Program received signal SIGSEGV, Segmentation fault.
0x00bb450b in vfprintf () from /lib/tls/
(gdb) bt
#0 0x00bb450b in vfprintf () from /lib/tls/
#1 0x00c55e62 in __vasprintf_chk () from /lib/tls/
#2 0x008c6abf in g_vasprintf () from /lib/libglib-
#3 0x008a5506 in g_strdup_vprintf () from /lib/libglib-
#4 0x008a5528 in g_strdup_printf () from /lib/libglib-
#5 0x0806f170 in ?? ()
#6 0x0081bdcc in g_cclosure_
from /usr/lib/
#7 0x0080e252 in g_closure_invoke () from /usr/lib/
#8 0x0082299d in ?? () from /usr/lib/
#9 0x00823db4 in g_signal_
#10 0x00824256 in g_signal_emit () from /usr/lib/
#11 0x001adc7a in gtk_button_clicked () from /usr/lib/
#12 0x001af238 in ?? () from /usr/lib/
#13 0x0081bdcc in g_cclosure_
from /usr/lib/
#14 0x0080c8b9 in ?? () from /usr/lib/
#15 0x0080e252 in g_closure_invoke () from /usr/lib/
#16 0x0082223a in ?? () from /usr/lib/
#17 0x00823db4 in g_signal_
#18 0x00824256 in g_signal_emit () from /usr/lib/
#19 0x001add1a in gtk_button_released () from /usr/lib/
#20 0x001add63 in ?? () from /usr/lib/
---Type <return> to continue, or q <return> to quit---
#21 0x0026b424 in ?? () from /usr/lib/
#22 0x0080c8b9 in ?? () from /usr/lib/
#23 0x0080e252 in g_closure_invoke () from /usr/lib/
#24 0x008225e6 in ?? () from /usr/lib/
#25 0x00823c33 in g_signal_
#26 0x00824256 in g_signal_emit () from /usr/lib/
#27 0x00398636 in ?? () from /usr/lib/
#28 0x00263a5d in gtk_propagate_event () from /usr/lib/
#29 0x00264e07 in gtk_main_do_event () from /usr/lib/
#30 0x0055939a in ?? () from /usr/lib/
#31 0x008825e5 in g_main_
#32 0x008862d8 in ?? () from /lib/libglib-
#33 0x00886817 in g_main_loop_run () from /lib/libglib-
#34 0x002653c9 in gtk_main () from /usr/lib/
#35 0x0808060b in ?? ()
#36 0x00b8abd6 in __libc_start_main () from /lib/tls/
#37 0x08054381 in ?? ()
The known Workarounds I've found so far:
Workaround 1: Start easytag with LANG=C.
Workaround 2: Use only freedb.
Changed in easytag: | |
status: | Fix Committed → Fix Released |
Changed in easytag (Ubuntu): | |
importance: | Undecided → Medium |
status: | New → Confirmed |
Changed in easytag (Ubuntu): | |
status: | Confirmed → Fix Committed |
This crash has been found to be caused by the unmatched order of the message parameters in the file '/usr/share/ locale/ ja/LC_MESSAGES/ easytag. mo' and the source code cddb.c:3290. undertsechs' at forums. ubuntulinux. jp)
(My thanks to forum member 'einundzwanzigh
/usr/share/ locale/ ja/LC_MESSAGES/ easytag. mo:
msgid "Found %d matching album(s) for DiscID '%s'"
msgstr "DiscID '%s' に一致するアルバムが %d 個見つかりました"
cddb.c: printf( _("Found %d matching album(s) for DiscID '%s'"), g_list_ length( CddbAlbumList) ,cddb_discid) ;
msg = g_strdup_
The aforementioned gdb backtrace "#5 0x0806f170 in ?? ()" was actually #5 0x0806f1d0 in Cddb_Search_ Album_From_ Selected_ Files () at cddb.c:3290