[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
pkg/43879: gettext-lib miscompiles on DragonFly
>Synopsis: gettext-lib miscompiles on DragonFly
>Arrival-Date: Tue Sep 14 17:35:00 +0000 2010
>Originator: Francois Tigeot
DragonFly sekishi.zefyris.com 2.7-DEVELOPMENT DragonFly
v188.8.131.522.gd8d671-DEVELOPMENT #3: Tue Sep 14 11:55:21 CEST 2010
With a DragonFly/x86-64 system, setting LANG to a non-english locale results in
an immediate crash of applications using devel/gettext-lib (pretty much
everything in a modern X11 desktop).
Example with mutt:
$ LANG=fr_FR.UTF-8 mutt
 5541 segmentation fault (core dumped) LANG=fr_FR.UTF-8 mutt
I have tracked this crash to line 669 of gettext-runtime/intl/dcigettext.c
This line uses a value returned by a previous call of tsearch().
tsearch() is declared in /usr/include/search.h and returns a pointer.
Howewer, search.h is not included in dcigettext.c and thus the compiler
considers tsearch() returns a value of type int.
With the amd64 ABI, sizeof(int) is less than sizeof(void*). The pointer is
truncated and the program crashes trying to access a random memory address.
The problem also exists on DragonFly/i386, but on this architecture,
sizeof(int) and sizeof(void*) are the same and thus the void* to int conversion
does not results in any ill effects.
The reason <search.h> is not included ultimately lies with the GNU configure
system. This code is an extract of dcigettext.c:
# if defined HAVE_SEARCH_H
# include <search.h>
The inclusion of <search.h> is protected by the HAVE_SEARCH_H symbol. It should
be defined in an automatically generated file, configure.h but is not.
Set LANG to fr_FR.UTF-8
Try to run mail/mutt
Main Index |
Thread Index |