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 E47F220710 for ; Wed, 6 Jul 2016 07:14:37 +0000 (UTC) From: Eric Wong To: meta@public-inbox.org Subject: [PATCH 04/10] address: attempt to handle comments somewhat Date: Wed, 6 Jul 2016 07:14:29 +0000 Message-Id: <20160706071435.18143-5-e@80x24.org> In-Reply-To: <20160706071435.18143-1-e@80x24.org> References: <20160706071435.18143-1-e@80x24.org> List-Id: They're uncommon, fortunately, but we make no attempt to handle nested comments (which would open us up to things like CVE-2015-7686) or use the comment in place of a missing name. --- lib/PublicInbox/Address.pm | 6 ++++-- t/address.t | 9 +++++++++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/lib/PublicInbox/Address.pm b/lib/PublicInbox/Address.pm index e17d0b5..2c0bb04 100644 --- a/lib/PublicInbox/Address.pm +++ b/lib/PublicInbox/Address.pm @@ -7,7 +7,9 @@ use warnings; # very loose regexes, here. We don't need RFC-compliance, # just enough to make thing sanely displayable and pass to git -sub emails { ($_[0] =~ /([\w\.\+=\-]+\@[\w\.\-]+)>?\s*(?:,\s*|\z)/g) } +sub emails { + ($_[0] =~ /([\w\.\+=\-]+\@[\w\.\-]+)>?\s*(?:\(.*?\))?(?:,\s*|\z)/g) +} sub names { map { @@ -19,7 +21,7 @@ sub names { $e = $_ =~ /\S/ ? $_ : $e; $e =~ s/\@\S+\z//; $e; - } split(/\@+[\w\.\-]+>?\s*(?:,\s*|\z)/, $_[0]); + } split(/\@+[\w\.\-]+>?\s*(?:\(.*?\))?(?:,\s*|\z)/, $_[0]); } 1; diff --git a/t/address.t b/t/address.t index 3191fed..287fcfa 100644 --- a/t/address.t +++ b/t/address.t @@ -20,4 +20,13 @@ is_deeply(['User', 'e', 'John A. Doe', 'x'], \@names, @names = PublicInbox::Address::names('"user@example.com" '); is_deeply(['user'], \@names, 'address-as-name extraction works as expected'); + +{ + my $backwards = 'u@example.com (John Q. Public)'; + @names = PublicInbox::Address::names($backwards); + is_deeply(\@names, ['u'], 'backwards name OK'); + my @emails = PublicInbox::Address::emails($backwards); + is_deeply(\@emails, ['u@example.com'], 'backwards emails OK'); +} + done_testing; -- EW