#3888: mutt 1.5.23 and 1.7.1 segfault on valid-seeming HTML message
----------------------+----------------------
Reporter: Lorens | Owner: mutt-dev
Type: defect | Status: new
Priority: critical | Milestone:
Component: display | Version: 1.7.1
Keywords: |
----------------------+----------------------
I run 1.5.23 from Ubuntu 15.10. I get a regular message (MIME, one part
only and that HTML, definitely non-spam but possibly ill-generated since
it's sent from a website). Hitting [enter] on the message list
systematically segfaults for every message from this sender. However,
hitting [v] and then [enter] correctly opens a new tab in my browser like
I want it to.
My binary was stripped and optimized, so instead of upgrading Ubuntu (it's
planned :) ) I downloaded and compiled 1.7.1 with debugging symbols. I
still have the segfault.
{{{
Program terminated with signal SIGSEGV, Segmentation fault.
[...]
(gdb) bt
#0 0x000000000045d6dc in resolve_types (
buf=0x1a94490 "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\"
\"http://www.w3.org/TR/html4/strict.dtd\"> <html> <head> <meta
name=\"generator\" content=\"HTML Tidy for Windows (vers 14 February
2006), see www.w3.org\">"...,
raw=0x1a74780 "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\"
\"http://www.w3.org/TR/html4/strict.dtd\"> <html> <head> <meta
name=\"generator\" content=\"HTML Tidy for Windows (vers 14 February
2006), see www.w3.org\">"..., lineInfo=0x1a73090, n=11, last=12,
QuoteList=0x7fff38406d98, q_level=0x7fff38406d20,
force_redraw=0x7fff38406d24, q_classify=2) at pager.c:883
#1 0x000000000045ed0c in display_line (f=0x1a70b40,
last_pos=0x7fff38406da8, lineInfo=0x7fff38406d90, n=11,
last=0x7fff38406d1c, max=0x7fff38406d18, flags=66,
QuoteList=0x7fff38406d98, q_level=0x7fff38406d20,
force_redraw=0x7fff38406d24, SearchRE=0x7fff38406e10,
pager_window=0x1a73bf0) at pager.c:1347
#2 0x00000000004607c2 in mutt_pager (banner=0x0, fname=0x7fff38407690
"/home/lorens/.tmp/TMPDIR//mutt-rush-1000-14827-1801976544388463232",
flags=66,
extra=0x7fff38407660) at pager.c:1811
#3 0x0000000000414c52 in mutt_display_message (cur=0x1a63b00) at
commands.c:214
#4 0x00000000004254f1 in mutt_index_menu () at curs_main.c:1313
#5 0x000000000044ab0e in main (argc=1, argv=0x7fff38408e28) at
main.c:1228
}}}
After mucking about in gdb it seems that in trying to colorize my HTML
message of some 130kB, the line
872 if (++(lineInfo[n].chunks) > 1)
makes "short chunks" roll over to -32768. This is not caught, variable i
follows, next time through the loop i is used to index into an array, and
boom.
At this point I've not tried to analyze either the regex parsing or the
HTML in detail, so I can't be sure if the HTML is totally wrecked or not
(the w3 validator seems to think it is, but Chrome displays it with no
apparent problems).
I suppose it is possible to configure mutt to launch my browser
immediately instead of having it try to colorize the HTML (problem
disappears if I comment out "color body default default ." from my
.muttrc), but I do hate segfaults triggered by parsing incoming mail, so
I'm grading this critical.
--
Ticket URL: <https://dev.mutt.org/trac/ticket/3888>
Mutt <http://www.mutt.org/>
The Mutt mail user agent