git has stricter requirements for ident names (no '<>')
which Email::Address allows.

Even in 1.908, Email::Address also has an incomplete fix for
CVE-2015-7686 with a DoS-able regexp for comments.  Since we
don't care for or need all the RFC compliance of Email::Address,
avoiding it entirely may be preferable.

Email::Address will still be installed as a requirement for
Email::MIME, but it is only used by the
Email::MIME::header_str_set which we do not use (not even in
public-inbox).
---
 INSTALL          |  1 -
 Makefile.PL      |  1 -
 lib/Ssoma/MDA.pm | 17 +++++++++++------
 3 files changed, 11 insertions(+), 8 deletions(-)

diff --git a/INSTALL b/INSTALL
index 72affff..6a03f37 100644
--- a/INSTALL
+++ b/INSTALL
@@ -36,7 +36,6 @@ convenience.
 * any MUA capable of reading/importing IMAP, mbox(5) or Maildir
 * Perl and several modules:     (Debian package name (7.0))
   - Digest::SHA                 perl
-  - Email::Address              libemail-address-perl
   - Email::LocalDelivery        libemail-localdelivery-perl
   - Email::MIME                 libemail-mime-perl
   - File::Path::Expand          libfile-path-expand-perl
diff --git a/Makefile.PL b/Makefile.PL
index bbf784d..b16c17c 100644
--- a/Makefile.PL
+++ b/Makefile.PL
@@ -19,7 +19,6 @@ WriteMakefile(
        PREREQ_PM => {
                # Keep this sorted and synced to the INSTALL document
                'Digest::SHA' => 0,
-               'Email::Address' => 0,
                'Email::LocalDelivery' => 0,
                'Email::MIME' => 0,
                'IPC::Run' => 0,
diff --git a/lib/Ssoma/MDA.pm b/lib/Ssoma/MDA.pm
index 0a6d27d..8397a2b 100644
--- a/lib/Ssoma/MDA.pm
+++ b/lib/Ssoma/MDA.pm
@@ -6,7 +6,6 @@ package Ssoma::MDA;
 use strict;
 use warnings;
 use Ssoma::GitIndexInfo;
-use Email::Address;
 
 sub new {
        my ($class, $git) = @_;
@@ -106,14 +105,20 @@ sub append {
 
        {
                my $from = $mime->header('From');
-               my @from = Email::Address->parse($from);
-               my $name = $from[0]->name;
-               my $email = $from[0]->address;
+               my (@email) = ($from =~ /([^<\s]+\@[^>\s]+)/g);
+               my $name = $from;
+               $name =~ s/\s*\S+\@.*\S+\s*//;
+               my $email = $email[0] || 'invalid@example';
+               if ($name !~ /\S/ || $name =~ /[<>]/) {
+                       $name = $email[0];
+                       $name =~ s/\@.*//;
+               }
+               $name =~ s/\A\s*//;
                my $date = $mime->header('Date');
                my $subject = $mime->header("Subject");
                $subject = '(no subject)' unless defined $subject;
-               local $ENV{GIT_AUTHOR_NAME} ||= $name if defined $name;
-               local $ENV{GIT_AUTHOR_EMAIL} ||= $email if defined $email;
+               local $ENV{GIT_AUTHOR_NAME} ||= $name;
+               local $ENV{GIT_AUTHOR_EMAIL} ||= $email[0];
                local $ENV{GIT_AUTHOR_DATE} ||= $date if defined $date;
                $git->commit_index($gii, 0, $ref, $subject);
        }
-- 
EW

--
unsubscribe: meta+unsubscr...@public-inbox.org
archive: https://public-inbox.org/meta/

Reply via email to