Bug 10044

Summary: Sylph-claws dumps core when editing displayed headers
Product: Sisyphus Reporter: avm <avm>
Component: claws-mailAssignee: Mikhail Efremov <sem>
Status: CLOSED FIXED QA Contact: qa-sisyphus
Severity: normal    
Priority: P2 CC: at, cas, crux, ender, lav, ldv, mike, qa_viy, sem, shaba, viy
Version: unstable   
Hardware: all   
OS: Linux   
Attachments:
Description Flags
local fix. probably incorrect ?
none
патч, похожий на корректный.
none
claws-mail-alt-display-header.patch none

Description avm 2006-09-26 19:52:28 MSD
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:  
Чтобы не падало.
(Воспроизводится на двух машинах.)
Comment 1 avm 2007-01-02 18:43:42 MSK
Воспроизводится на claws-mail 2.6.1.cvs37-alt1.
Comment 2 Alexey Rusakov 2007-10-16 14:35:42 MSD
Воспроизводится на claws-mail-3.0.2cvs57. Апстрим-то знает?
Comment 3 algor 2007-10-16 18:09:56 MSD
неа. я и сам то забыл, честно говоря. хотя собирался починить ещё в стародавние
времена. руки дойдут, сделаю.
Comment 4 Alexey Rusakov 2009-07-08 12:06:51 MSD
По-прежнему воспроизводится на claws-mail-3.7.1-alt1...
Comment 5 algor 2009-07-08 15:48:32 MSD
Created attachment 3646 [details]
local fix. probably incorrect ?

локально у себя я лично решил эту проблему таким образом. с ходу не соображу насколько это корректно, правда.
Comment 6 algor 2009-07-08 15:56:59 MSD
хотя, наверное, было бы правильнее в случае нажатия 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);
}

хмхм. в общем сейчас попробую сделать ещё патч.
Comment 7 algor 2009-07-08 16:04:43 MSD
Created attachment 3647 [details]
патч, похожий на корректный.
Comment 8 Mikhail Efremov 2009-07-08 17:42:44 MSD
Фиксить надо причину, а не следствие и не в этом месте.
Я немного посмотрел код.
Там проблема в том, что при перетаскивании и возврате на месте поля в список prefs_common.disphdr_list вставляется тот же указатель еще раз. Соответсвенно при повторном вызове display_header_prop_free() на тот же адрес имеем segfault.
Нужно не допустить вставки в лист того же самого значения. Точнее там похоже не удаляется указатель из списка при... эээ... начале перетаскивания. Надо поглубже посмотреть код. Может чуть позже дойдут руки, и сделаю патч.
Comment 9 Alexey Rusakov 2009-07-09 00:26:11 MSD
(В ответ на комментарий №8)
> Может чуть позже дойдут руки, и сделаю патч.
Спасибо заранее. Патч обещаю протолкнуть в апстрим.
Comment 10 Mikhail Efremov 2009-07-09 20:53:40 MSD
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 явно не расчитывал.
Comment 11 Alexey Rusakov 2009-07-09 23:48:32 MSD
Попробовал с патчем, вроде исправилось, пошёл толкать в апстрим: http://www.thewildbeast.co.uk/claws-mail/bugzilla/show_bug.cgi?id=1951
Comment 12 Alexey Rusakov 2009-07-10 12:13:40 MSD
Апстрим принял патч, правда, лавры в ChangeLog'е достались мне %-\ У нас оно тоже скоро будет, как только пройдёт shared task 9163.
Comment 13 Alexey Rusakov 2009-07-10 23:46:32 MSD
Ловите 3.7.2-alt1