From 6adc50fe899f229b17e6ee08537a4e9152a1e4fb Mon Sep 17 00:00:00 2001 From: Don Armstrong Date: Tue, 29 Jul 2014 13:00:55 -0700 Subject: [PATCH] fix multipart messages when quoting the body; bodyhandle does not necessarily exist in those cases; fixes #756427 --- Debbugs/Mail.pm | 36 +++++++++++++++++++++++++++++------- 1 file changed, 29 insertions(+), 7 deletions(-) diff --git a/Debbugs/Mail.pm b/Debbugs/Mail.pm index a00b41c..a2a27d2 100644 --- a/Debbugs/Mail.pm +++ b/Debbugs/Mail.pm @@ -444,14 +444,36 @@ sub reply_headers{ my $body = "On $date $who wrote:\n"; my $i = 60; - my $b_h = $entity->bodyhandle; - my $IO = $b_h->open("r"); - while (defined($_ = $IO->getline)) { - $i--; - last if $i < 0; - $body .= '> '. $_; + my $b_h; + ## find the first part which has a defined body handle and appears + ## to be text + if (defined $entity->bodyhandle) { + $b_h = $entity->bodyhandle; + } elsif ($entity->parts) { + my @parts = $entity->parts; + while (defined(my $part = shift @parts)) { + if ($part->parts) { + push @parts,$part->parts; + } + if (defined $part->bodyhandle and + $part->effective_type =~ /text/) { + print STDERR $part->effective_type."\n"; + $b_h = $part->bodyhandle; + last; + } + } + } + if (defined $b_h) { + eval { + my $IO = $b_h->open("r"); + while (defined($_ = $IO->getline)) { + $i--; + last if $i < 0; + $body .= '> '. $_; + } + $IO->close(); + }; } - $IO->close(); $r_l{body} = $body; return \%r_l; } -- 2.39.2