Steps to Reproduce: 1. ставим sylpheed-claws=2.3.1.cvs20-alt1.и запускаем. 2. Идем в Configuration -> Preferences... -> Message View -> Text Options. 3. Нажимаем Edit... 4. Выбираем поле Organization, удаляем, нажимаем OK. 5. Нажимаем Edit... 6. Хватаем поле From, тащим его куда-нибудь, потом возвращаем на место. 7. Нажимаем Cancel. Actual Results: *** glibc detected *** free(): invalid pointer: 0x0829f7c0 *** Aborted Expected Results: Чтобы не падало. (Воспроизводится на двух машинах.)
Воспроизводится на claws-mail 2.6.1.cvs37-alt1.
Воспроизводится на claws-mail-3.0.2cvs57. Апстрим-то знает?
неа. я и сам то забыл, честно говоря. хотя собирался починить ещё в стародавние времена. руки дойдут, сделаю.
По-прежнему воспроизводится на claws-mail-3.7.1-alt1...
Created attachment 3646 [details] local fix. probably incorrect ? локально у себя я лично решил эту проблему таким образом. с ходу не соображу насколько это корректно, правда.
хотя, наверное, было бы правильнее в случае нажатия ESC или кнопки cancel вызывать static void prefs_display_header_cancel(void) { gtk_widget_hide(dispheader.window); } а в случае вызова prefs_display_header_deleted, звать static void prefs_display_header_delete(void) { prefs_display_header_read_config(); gtk_widget_hide(dispheader.window); } хмхм. в общем сейчас попробую сделать ещё патч.
Created attachment 3647 [details] патч, похожий на корректный.
Фиксить надо причину, а не следствие и не в этом месте. Я немного посмотрел код. Там проблема в том, что при перетаскивании и возврате на месте поля в список prefs_common.disphdr_list вставляется тот же указатель еще раз. Соответсвенно при повторном вызове display_header_prop_free() на тот же адрес имеем segfault. Нужно не допустить вставки в лист того же самого значения. Точнее там похоже не удаляется указатель из списка при... эээ... начале перетаскивания. Надо поглубже посмотреть код. Может чуть позже дойдут руки, и сделаю патч.
(В ответ на комментарий №8) > Может чуть позже дойдут руки, и сделаю патч. Спасибо заранее. Патч обещаю протолкнуть в апстрим.
Created attachment 3658 [details] claws-mail-alt-display-header.patch Выкинул обработчик сигнала row_changed, вместо этого все действия происходят по сигналу drag_end: один черт row_changed посылается даже если порядок элементов списка не изменился. Проблема возникала как раз в нем: при обходе списка с помощью gtk_tree_model_iter_nth_child() (кстати там можно gtk_tree_model_foreach() использовать, ну да ладно) один и тот же адрес возвращается дважды. Видимо во время этого сигнала существует некое промежуточное состояние - элемент на новое место уже добавился, а со старого еще не удалился. Является ли это нормальным поведением или это баг в GTK - без понятия. Во всяком случае на такое поведение апстрим claws'a явно не расчитывал.
Попробовал с патчем, вроде исправилось, пошёл толкать в апстрим: http://www.thewildbeast.co.uk/claws-mail/bugzilla/show_bug.cgi?id=1951
Апстрим принял патч, правда, лавры в ChangeLog'е достались мне %-\ У нас оно тоже скоро будет, как только пройдёт shared task 9163.
Ловите 3.7.2-alt1