Подробности
[В начало]
Проблема в реализации № D0002
Краткое описание
В определенных случаях вызов функции "g_hook_free" приводит к падению процесса
Подробное описание
Установка полю "finalize_hook" структуры "GHookList" значения "NULL" приводит к падению процесса при вызове функции g_hook_free. В документации к функции g_hook_free указано: Calls the GHookList hook_free function if it exists, and frees the memory allocated for the GHook. В данной цитате "hook_free function" следует читать как "finalize_hook function", так как именно эта функция вызывается в исходном коде g_hook_free, а функция hook_free нигде не обнаружена.
Раздел стандарта
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-Hook-Functions.html#g-hook-free
Пример
#include <glib.h> int main() { GHookList hookList; g_hook_list_init(&hookList, sizeof(GHook)); hookList.finalize_hook = NULL; GHook* hook = g_hook_alloc(&hookList); g_hook_free(&hookList, hook); }
Способы устранения
Предлагается ввести проверку на "NULL" для указателя на функцию "finalize_hook" в исходном коде интерфейса "g_hook_free()".
--- glib-2.14.0/glib/ghook.c +++ glib-2.14.0-fixed/glib/ghook.c @@ -130,7 +130,8 @@ g_return_if_fail (G_HOOK_IS_UNLINKED (hook)); g_return_if_fail (!G_HOOK_IN_CALL (hook)); - hook_list->finalize_hook (hook_list, hook); + if(hook_list->finalize_hook != NULL) + hook_list->finalize_hook (hook_list, hook); g_slice_free1 (hook_list->hook_size, hook); }
Компонент
gtk-glib 2.6.2 or later
Принято
Gnome Bugzilla 476849
Статус
Исправлено в gtk-glib - 2.14.2
[В начало]