diff --git a/ChangeLog b/ChangeLog index b542cb33aa82f3f7309d8e59d536e5ff32c5ab8a..5146bbb4455f6de0db7e25ba948b4d7ae57d8060 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2008-10-19 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de> + + * Fix a segfault in link parsing caused by malformed dictionary texts. + + 2008-10-18 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de> * Use a SexyIconEntry for the search field, it's just sexy :). diff --git a/lib/dictd.c b/lib/dictd.c index 7e7fb13477c4ac12e3fe82574c309880f1c8086e..f0bb93dc59c3c99017247aa36c616b2192e80419 100644 --- a/lib/dictd.c +++ b/lib/dictd.c @@ -151,6 +151,13 @@ static void parse_line(DictData *dd, GString *buffer) g_string_erase(buffer, 0, len); /* remove already added text */ end = strchr(buffer->str, '}'); + if (start > end) + { + /* braces don't match, skip this part, e.g. 'fd-deu-eng' returns + * ' frozen}; to be cold; to freeze {froze' */ + gtk_text_buffer_insert(dd->main_textbuffer, &dd->textiter, "{", 1); + continue; + } len = end - buffer->str; /* length of the link */ found_link = g_strndup(buffer->str, len);