Bug 3420

Summary: Segfaults if no XFree locales available
Product: Sisyphus Reporter: Sir Raorn <raorn>
Component: xorg-x11Assignee: Valery Inozemtsev <shrek>
Status: CLOSED FIXED QA Contact: qa-sisyphus
Severity: major    
Priority: P2 CC: ldv, rider
Version: unstable   
Hardware: all   
OS: Linux   

Description Sir Raorn 2003-12-30 08:49:58 MSK
vim-X11-* (все версии кроме gtk+, тестировалось на Master 2.2) падают по SIGSEGV
при запуске на удалённом терминале если не установлен пакет XFree86-locales.
gtk+ версия выдаёт warning и успешно запускается.

По всей видимости, удалённый терминал это есдинственный вариант, когда пакет
XFree86-locales не установлен (присутствуют только XFree86-libs и
XFree86-utils), при наличии XFree86-servers он вытягивается по зависимостям.
Comment 1 Anton Farygin 2004-05-13 17:39:52 MSD
Исправлена ли ошибка ? или мне стоит поставить зависимость у libs на locales ?
Comment 2 Sir Raorn 2004-05-14 08:20:20 MSD
Я пока не могу найти площадку чтобы это проверить.  Есть стойкое подозрение, что
падает не сам vim, а кто-то из X'овых библиотек.  В любом случае зависимость
лишней не будет.
Comment 3 Sir Raorn 2004-05-14 08:23:07 MSD
Буду разбираться с этим позже...
Comment 4 Anton Farygin 2004-05-17 15:46:26 MSD
Зависимость будет лишней, если локали реально не нужны никаким библиотекам. В
любом случае - надо знать точно ;-)
Comment 5 Sir Raorn 2004-07-02 12:48:06 MSD
Воспроизводится на Master 2.4beta2.
Тестовый полигон есть, разбираюсь...
Comment 6 Sir Raorn 2004-07-02 14:43:29 MSD
athena и neXtaw версии падают внутри lib{neXtaw,Xaw}. Это точно проблема не VIm.

static void SetTextWidthAndHeight(lw)
{
...
      XFontSet	fset = lw->label.fontset;
      XFontSetExtents *ext = XExtentsOfFontSet(fset);

      lw->label.label_height = ext->max_ink_extent.height;
...

lw->label.fontset - NULL (из-за отсутствия локали), XExtentsOfFontSet(NULL)
пытается что-то возвращать (в моём случае это было 0x28). Выпадаем на ext->...

Я также склоняюсь к мысли, что это не проблема Xaw/neXtaw, а дело в самой libXt
(XFree86-libs)...
Comment 7 Sir Raorn 2004-07-03 16:25:04 MSD
Не знаю точно чья именно проблема, но виноват XFree86-libs.

Если локалей нет, не использутся fontset'ы и аттрибут fontSet у всех виджетов
выставляется в NULL. Если у виджета аттрибут international установлен в True,
подразумевается что использутся fontSet. Далее на этот fontSet (NULL!)
вызывается функция XExtentsOfFontSet (libX11), которая выглядит следующим образом:

XFontSetExtents *
XExtentsOfFontSet(font_set)
    XFontSet        font_set;
{
    return &font_set->core.font_set_extents;
}

т.е. возвращается (font_set + некое_смещение) без проверки валидности аргумента.

Таким образом будут падать все Xaw/neXtaw приложения (в библиотеке) а также
xfontsel (в своей реализации виджета ULabel).

Самы простой вариант всё исправить - прописать зависимость -locales от -libs или
внести -locales в состав -libs (с соответствующим Obsoletes).
Comment 8 Anton Farygin 2005-06-20 18:23:41 MSD
reassign to xorg
Comment 9 Valery Inozemtsev 2005-06-20 18:26:51 MSD
это первое что я исправил