From 3fc59df0d633a17e0c5e43d633d12e8772c06ec3 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Tue, 10 Jan 2017 21:40:37 +0000 Subject: introduce PublicInbox::MIME wrapper class This should fix problems with multipart messages where text/plain parts lack a header. cf. git clone --mirror https://github.com/rjbs/Email-MIME.git refs/pull/28/head In the future, we may still introduce as streaming interface to reduce memory usage on large emails. --- t/import.t | 6 +++--- t/mime.t | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 60 insertions(+), 3 deletions(-) create mode 100644 t/mime.t (limited to 't') diff --git a/t/import.t b/t/import.t index 73f92adb..29d00b05 100644 --- a/t/import.t +++ b/t/import.t @@ -3,7 +3,7 @@ use strict; use warnings; use Test::More; -use Email::MIME; +use PublicInbox::MIME; use PublicInbox::Git; use PublicInbox::Import; use File::Temp qw/tempdir/; @@ -13,7 +13,7 @@ is(system(qw(git init -q --bare), $dir), 0, 'git init successful'); my $git = PublicInbox::Git->new($dir); my $im = PublicInbox::Import->new($git, 'testbox', 'test@example'); -my $mime = Email::MIME->create( +my $mime = PublicInbox::MIME->create( header => [ From => 'a@example.com', To => 'b@example.com', @@ -50,7 +50,7 @@ $im->done; is(scalar @revs, 26, '26 revisions exist after mass import'); my ($mark, $msg) = $im->remove($mime); like($mark, qr/\A:\d+\z/, 'got mark'); -is(ref($msg), 'Email::MIME', 'got old message deleted'); +is(ref($msg), 'PublicInbox::MIME', 'got old message deleted'); is(undef, $im->remove($mime), 'remove is idempotent'); diff --git a/t/mime.t b/t/mime.t new file mode 100644 index 00000000..cd3303d1 --- /dev/null +++ b/t/mime.t @@ -0,0 +1,57 @@ +# Copyright (C) 2017 all contributors +# This library is free software; you can redistribute it and/or modify +# it under the same terms as Perl itself. +# Artistic or GPL-1+ +use strict; +use warnings; +use Test::More; +use_ok 'PublicInbox::MIME'; + +my $msg = PublicInbox::MIME->new( +'From: Richard Hansen +To: git@vger.kernel.org +Cc: Richard Hansen +Subject: [PATCH 0/2] minor diff orderfile documentation improvements +Date: Mon, 9 Jan 2017 19:40:29 -0500 +Message-Id: <20170110004031.57985-1-hansenr@google.com> +X-Mailer: git-send-email 2.11.0.390.gc69c2f50cf-goog +Content-Type: multipart/signed; protocol="application/pkcs7-signature"; micalg=sha-256; + boundary="94eb2c0bc864b76ba30545b2bca9" + +--94eb2c0bc864b76ba30545b2bca9 + +Richard Hansen (2): + diff: document behavior of relative diff.orderFile + diff: document the pattern format for diff.orderFile + + Documentation/diff-config.txt | 5 ++++- + Documentation/diff-options.txt | 3 ++- + 2 files changed, 6 insertions(+), 2 deletions(-) + + +--94eb2c0bc864b76ba30545b2bca9 +Content-Type: application/pkcs7-signature; name="smime.p7s" +Content-Transfer-Encoding: base64 +Content-Disposition: attachment; filename="smime.p7s" +Content-Description: (truncated) S/MIME Cryptographic Signature + +dkTlB69771K2eXK4LcHSH/2LqX+VYa3K44vrx1ruzjXdNWzIpKBy0weFNiwnJCGofvCysM2RCSI1 +--94eb2c0bc864b76ba30545b2bca9-- + +'); + +my @parts = $msg->parts; +my $exp = 'Richard Hansen (2): + diff: document behavior of relative diff.orderFile + diff: document the pattern format for diff.orderFile + + Documentation/diff-config.txt | 5 ++++- + Documentation/diff-options.txt | 3 ++- + 2 files changed, 6 insertions(+), 2 deletions(-) + +'; + +ok($msg->isa('Email::MIME'), 'compatible with Email::MIME'); +is($parts[0]->body, $exp, 'body matches expected'); + +done_testing(); -- cgit v1.2.3-24-ge0c7 From b6f6d1e1408ebf9ad71b9c912a82e3f92ed5d52c Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Wed, 18 Jan 2017 23:50:57 +0000 Subject: mime: avoid SUPER usage in Email::MIME subclass 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 --- t/mime.t | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) (limited to 't') diff --git a/t/mime.t b/t/mime.t index cd3303d1..c4bdcf0d 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(); -- cgit v1.2.3-24-ge0c7 From 7e40887e8d2bef4126b4a3680594860a3b2fd67c Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Thu, 26 Jan 2017 02:09:36 +0000 Subject: add filter for Subject: tags Some mailing lists add annoying tags into the Subject line which discourages readers from doing proper mail organization on the client side. They also waste precious screen space and attention span. Remove them from our archives to reduce clutter. --- t/filter_subjecttag.t | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 t/filter_subjecttag.t (limited to 't') diff --git a/t/filter_subjecttag.t b/t/filter_subjecttag.t new file mode 100644 index 00000000..54a219e7 --- /dev/null +++ b/t/filter_subjecttag.t @@ -0,0 +1,27 @@ +# Copyright (C) 2017 all contributors +# License: AGPL-3.0+ +use strict; +use warnings; +use Test::More; +use Email::MIME; +use_ok 'PublicInbox::Filter::SubjectTag'; + +my $f = eval { PublicInbox::Filter::SubjectTag->new }; +like($@, qr/tag not defined/, 'error without args'); +$f = PublicInbox::Filter::SubjectTag->new('-tag', '[foo]'); +is(ref $f, 'PublicInbox::Filter::SubjectTag', 'new object created'); + +my $mime = Email::MIME->new(< +Subject: =?UTF-8?B?UmU6IFtmb29dIEVsw4PCqWFub3I=?= + +EOF + +$mime = $f->delivery($mime); +is($mime->header('Subject'), "Re: El\xc3\xa9anor", 'filtered with Re:'); + +$mime->header_str_set('Subject', '[FOO] bar'); +$mime = $f->delivery($mime); +is($mime->header('Subject'), 'bar', 'filtered non-reply'); + +done_testing(); -- cgit v1.2.3-24-ge0c7