From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: X-Spam-Status: No, score=-4.0 required=3.0 tests=ALL_TRUSTED,BAYES_00 shortcircuit=no autolearn=ham autolearn_force=no version=3.4.0 Received: from localhost (dcvr.yhbt.net [127.0.0.1]) by dcvr.yhbt.net (Postfix) with ESMTP id D136B1F89C; Thu, 19 Jan 2017 00:34:13 +0000 (UTC) From: Eric Wong To: meta@public-inbox.org Cc: Junio C Hamano Subject: [PATCH] mime: avoid SUPER usage in Email::MIME subclass Date: Thu, 19 Jan 2017 00:34:13 +0000 Message-Id: <20170119003413.25193-1-e@80x24.org> List-Id: We must call Email::Simple methods directly in our monkey patch for Email::MIME to call the intended method. Using SUPER in our subclass would instead hit a different, unintended method in Email::MIME. Reported-by: Junio C Hamano --- lib/PublicInbox/MIME.pm | 6 ++--- t/mime.t | 60 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 63 insertions(+), 3 deletions(-) diff --git a/lib/PublicInbox/MIME.pm b/lib/PublicInbox/MIME.pm index 792fffd..54925a8 100644 --- a/lib/PublicInbox/MIME.pm +++ b/lib/PublicInbox/MIME.pm @@ -37,7 +37,7 @@ sub parts_multipart { return $self->parts_single_part unless $boundary and $self->body_raw =~ /^--\Q$boundary\E\s*$/sm; - $self->{body_raw} = $self->SUPER::body; + $self->{body_raw} = Email::Simple::body($self); # rfc1521 7.2.1 my ($body, $epilogue) = split /^--\Q$boundary\E--\s*$/sm, $self->body_raw, 2; @@ -45,13 +45,13 @@ sub parts_multipart { # Split on boundaries, but keep blank lines after them intact my @bits = split /^--\Q$boundary\E\s*?(?=$self->{mycrlf})/m, ($body || ''); - $self->SUPER::body_set(undef); + Email::Simple::body_set($self, undef); # If there are no headers in the potential MIME part, it's just part of the # body. This is a horrible hack, although it's debatable whether it was # better or worse when it was $self->{body} = shift @bits ... -- rjbs, # 2006-11-27 - $self->SUPER::body_set(shift @bits) if ($bits[0] || '') !~ /.*:.*/; + Email::Simple::body_set($self, shift @bits) if ($bits[0] || '') !~ /.*:.*/; my $bits = @bits; diff --git a/t/mime.t b/t/mime.t index cd3303d..c4bdcf0 100644 --- a/t/mime.t +++ b/t/mime.t @@ -6,6 +6,7 @@ use strict; use warnings; use Test::More; use_ok 'PublicInbox::MIME'; +use PublicInbox::MsgIter; my $msg = PublicInbox::MIME->new( 'From: Richard Hansen @@ -54,4 +55,63 @@ my $exp = 'Richard Hansen (2): ok($msg->isa('Email::MIME'), 'compatible with Email::MIME'); is($parts[0]->body, $exp, 'body matches expected'); + +my $raw = q^Date: Wed, 18 Jan 2017 13:28:32 -0500 +From: Santiago Torres +To: Junio C Hamano +Cc: git@vger.kernel.org, peff@peff.net, sunshine@sunshineco.com, + walters@verbum.org, Lukas Puehringer +Subject: Re: [PATCH v6 4/6] builtin/tag: add --format argument for tag -v +Message-ID: <20170118182831.pkhqu2np3bh2puei@LykOS.localdomain> +References: <20170117233723.23897-1-santiago@nyu.edu> + <20170117233723.23897-5-santiago@nyu.edu> + + +MIME-Version: 1.0 +Content-Type: multipart/signed; micalg=pgp-sha256; + protocol="application/pgp-signature"; boundary="r24xguofrazenjwe" +Content-Disposition: inline +In-Reply-To: + + +--r24xguofrazenjwe +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +Content-Transfer-Encoding: quoted-printable + +your tree directly?=20 + +--r24xguofrazenjwe +Content-Type: application/pgp-signature; name="signature.asc" + +-----BEGIN PGP SIGNATURE----- + +=7wIb +-----END PGP SIGNATURE----- + +--r24xguofrazenjwe-- + +^; + +$msg = PublicInbox::MIME->new($raw); +my $nr = 0; +msg_iter($msg, sub { + my ($part, $level, @ex) = @{$_[0]}; + if ($ex[0] == 1) { + is($part->body_str, "your tree directly? \r\n", 'body OK'); + } elsif ($ex[0] == 2) { + is($part->body, "-----BEGIN PGP SIGNATURE-----\n\n" . + "=7wIb\n" . + "-----END PGP SIGNATURE-----\n", + 'sig "matches"'); + } else { + fail "unexpected part\n"; + } + $nr++; +}); + +is($nr, 2, 'got 2 parts'); +is($msg->as_string, $raw, + 'stringified sufficiently close to original'); + done_testing(); -- EW