Подробности
[В начало]
Проблема в реализации № D0019
Краткое описание
Вызов функции "g_completion_complete_utf8" с определенными входными параметрами приводит к падению процесса
Подробное описание
Судя по документации функции g_completion_complete_utf8: "new_prefix: if non-NULL, returns the longest prefix which is common to all items that matched prefix, or NULL if no items matched prefix.", в то время как при вызове данной функции со значением "NULL" для параметра "new_prefix" происходит падение процесса с сигналом SIGSEGV.
Раздел стандарта
Linux Standard Base Desktop Specification 3.1, Chapter 12. Libraries, 12.2 Interfaces for libglib-2.0; http://www.gtk.org/api/2.6/glib/glib-Automatic-String-Completion.html#g-completion-complete-utf8
Способ воспроизведения
В примере производится вызов функции g_completion_complete_utf8 с значением "NULL" для параметра "new_prefix". Происходит аварийное завершение процесса с сигналом SIGSEGV.
Пример
#include <glib.h> int main () { GCompletion *gcmp = NULL; GList *l_items = NULL; GList *ret_list = NULL; gcmp = g_completion_new (NULL); l_items = g_list_append (l_items, "На берегу "); l_items = g_list_append (l_items, "На берегу пустынных волн,"); g_completion_add_items (gcmp, l_items); ret_list = g_completion_complete_utf8 (gcmp, "На ", NULL); return 0; }
Способы устранения
Изменения в файле "gcompletion.c", которые позволяют устранить проблему, представлены ниже (автор исправления M. Clasen):
--- glib-2.6.2/glib/gcompletion.c +++ glib-2.6.2-fixed/glib/gcompletion.c @@ -195,7 +195,7 @@ list = g_completion_complete (cmp, prefix, new_prefix); - if (*new_prefix) + if (new_prefix && *new_prefix) { p = *new_prefix + strlen (*new_prefix); q = g_utf8_find_prev_char (*new_prefix, p);
Компонент
gtk-glib 2.6.2 - 2.11.0
Статус
Исправлено в gtk-glib - 2.11.0
[В начало]