Summary: | Segfaults if no XFree locales available | ||
---|---|---|---|
Product: | Sisyphus | Reporter: | Sir Raorn <raorn> |
Component: | xorg-x11 | Assignee: | 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
Исправлена ли ошибка ? или мне стоит поставить зависимость у libs на locales ? Я пока не могу найти площадку чтобы это проверить. Есть стойкое подозрение, что падает не сам vim, а кто-то из X'овых библиотек. В любом случае зависимость лишней не будет. Буду разбираться с этим позже... Зависимость будет лишней, если локали реально не нужны никаким библиотекам. В любом случае - надо знать точно ;-) Воспроизводится на Master 2.4beta2. Тестовый полигон есть, разбираюсь... 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)... Не знаю точно чья именно проблема, но виноват 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). reassign to xorg это первое что я исправил |