[Bps-public-commit] email-address-list branch, master, updated. 0.05-9-gc01eb79

? sunnavy sunnavy at bestpractical.com
Tue Jan 29 16:05:24 EST 2019


The branch, master has been updated
       via  c01eb7998a0b6fbdef3934622ec4b7754cffb335 (commit)
       via  d3dc87f4cdaf926f9ef92f466aea85a84688df86 (commit)
       via  4636bb834918a6cc3b9e62582d5cf930b0719cd9 (commit)
       via  55083dbabcfd5dd2b811b35d4ec1250eaf50e2b0 (commit)
       via  31bd4dc2dfb26fd6a17e4436df3d3c8904856f30 (commit)
       via  6dd5021a6e5df2e8c86a163dc2e180a76a38e63b (commit)
       via  a22e6b233443fe3ad1a408e50ecbd7237674817d (commit)
      from  6a42da3fac2b631c660b52bce8eaa2333a81b53c (commit)

Summary of changes:
 Changes                             |  9 +++++
 MANIFEST                            | 25 ++++++++++++
 META.yml                            |  4 +-
 inc/Module/Install.pm               | 51 ++++++++-----------------
 inc/Module/Install/Base.pm          |  2 +-
 inc/Module/Install/Can.pm           | 13 ++++++-
 inc/Module/Install/Fetch.pm         |  2 +-
 inc/Module/Install/Makefile.pm      |  4 +-
 inc/Module/Install/Metadata.pm      |  6 +--
 inc/Module/Install/ReadmeFromPod.pm | 76 +++++++++++++++++++++++++++++--------
 inc/Module/Install/Win32.pm         |  2 +-
 inc/Module/Install/WriteAll.pm      |  2 +-
 lib/Email/Address/List.pm           | 36 +++++++++---------
 13 files changed, 151 insertions(+), 81 deletions(-)
 create mode 100644 MANIFEST

- Log -----------------------------------------------------------------
commit a22e6b233443fe3ad1a408e50ecbd7237674817d
Author: Alex Vandiver <alex at chmrr.net>
Date:   Tue Dec 4 04:50:23 2018 +0800

    Fix pathological backtracking in cfws, quoted strings
    
    This reprises 0ed9339a4f, more broadly.  Backtracking is only
    necessary when parsing of a token could be ambiguous -- and the BNF
    for email address is many things, but thankfully is essentially never
    ambiguous.
    
    Alter `cfws` to mean "one or more comments, or just space" -- since
    comments include space, this is no loss in generality over
    `(comment|space)*`.  Using this phrasing prevents backtracking into
    the `cwfs` token, which is key because of the nested nature of the
    comments regex therein.  Changing the `atom` definition is the only
    one strictly necessary to resolve this particular case, but greediness
    is applied throughout, for safety.

diff --git a/lib/Email/Address/List.pm b/lib/Email/Address/List.pm
index d7eb274..89a8266 100644
--- a/lib/Email/Address/List.pm
+++ b/lib/Email/Address/List.pm
@@ -201,36 +201,36 @@ $RE{'text'}           = qr/[^\x0A\x0D]/;
 $RE{'quoted_pair'}    = qr/\\$RE{'text'}/;
 
 $RE{'atext'}          = qr/[^$RE{'CTL'}$RE{'special'}\s]/;
-$RE{'ctext'}          = qr/(?>[^()\\]+)/;
+$RE{'ctext'}          = qr/[^()\\]++/;
 $RE{'qtext'}          = qr/[^\\"]/;
 $RE{'dtext'}          = qr/[^\[\]\\]/;
 
 ($RE{'ccontent'}, $RE{'comment'}) = (q{})x2;
 for (1 .. $COMMENT_NEST_LEVEL) {
   $RE{'ccontent'} = qr/$RE{'ctext'}|$RE{'quoted_pair'}|$RE{'comment'}/;
-  $RE{'comment'}  = qr/\s*\((?:\s*$RE{'ccontent'})*\s*\)\s*/;
+  $RE{'comment'}  = qr/(?>\s*+\((?:\s*+$RE{'ccontent'})*+\s*+\)\s*+)/;
 }
-$RE{'cfws'}           = qr/$RE{'comment'}|\s+/;
+$RE{'cfws'}           = qr/$RE{'comment'}++|\s*+/;
 
 $RE{'qcontent'}       = qr/$RE{'qtext'}|$RE{'quoted_pair'}/;
-$RE{'quoted-string'}  = qr/$RE{'cfws'}*"$RE{'qcontent'}*"$RE{'cfws'}*/;
+$RE{'quoted-string'}  = qr/$RE{'cfws'}"$RE{'qcontent'}*+"$RE{'cfws'}/;
 
-$RE{'atom'}           = qr/$RE{'cfws'}*$RE{'atext'}++$RE{'cfws'}*/;
+$RE{'atom'}           = qr/$RE{'cfws'}$RE{'atext'}++$RE{'cfws'}/;
 
 $RE{'word'}           = qr/$RE{'atom'} | $RE{'quoted-string'}/x;
 $RE{'phrase'}         = qr/$RE{'word'}+/x;
 $RE{'display-name'}   = $RE{'phrase'};
 
-$RE{'dot_atom_text'}  = qr/$RE{'atext'}+(?:\.$RE{'atext'}+)*/;
-$RE{'dot_atom'}       = qr/$RE{'cfws'}*$RE{'dot_atom_text'}$RE{'cfws'}*/;
+$RE{'dot_atom_text'}  = qr/$RE{'atext'}++(?:\.$RE{'atext'}++)*/;
+$RE{'dot_atom'}       = qr/$RE{'cfws'}$RE{'dot_atom_text'}$RE{'cfws'}/;
 $RE{'local-part'}     = qr/$RE{'dot_atom'}|$RE{'quoted-string'}/;
 
 $RE{'dcontent'}       = qr/$RE{'dtext'}|$RE{'quoted_pair'}/;
-$RE{'domain_literal'} = qr/$RE{'cfws'}*\[(?:\s*$RE{'dcontent'})*\s*\]$RE{'cfws'}*/;
+$RE{'domain_literal'} = qr/$RE{'cfws'}\[(?:\s*$RE{'dcontent'})*\s*\]$RE{'cfws'}/;
 $RE{'domain'}         = qr/$RE{'dot_atom'}|$RE{'domain_literal'}/;
 
 $RE{'addr-spec'}      = qr/$RE{'local-part'}\@$RE{'domain'}/;
-$RE{'angle-addr'}     = qr/$RE{'cfws'}* < $RE{'addr-spec'} > $RE{'cfws'}*/x;
+$RE{'angle-addr'}     = qr/$RE{'cfws'} < $RE{'addr-spec'} > $RE{'cfws'}/x;
 
 $RE{'name-addr'}      = qr/$RE{'display-name'}?$RE{'angle-addr'}/;
 $RE{'mailbox'}        = qr/(?:$RE{'name-addr'}|$RE{'addr-spec'})$RE{'comment'}*/;
@@ -238,12 +238,12 @@ $RE{'mailbox'}        = qr/(?:$RE{'name-addr'}|$RE{'addr-spec'})$RE{'comment'}*/
 $CRE{'addr-spec'}      = qr/($RE{'local-part'})\@($RE{'domain'})/;
 $CRE{'mailbox'} = qr/
     (?:
-        ($RE{'display-name'})?($RE{'cfws'}*)<$CRE{'addr-spec'}>($RE{'cfws'}*)
+        ($RE{'display-name'})?($RE{'cfws'})<$CRE{'addr-spec'}>($RE{'cfws'})
         |$CRE{'addr-spec'}
-    )($RE{'comment'}*)
+    )($RE{'comment'}*+)
 /x;
 
-$RE{'dword'}            = qr/$RE{'cfws'}* (?: $RE{'atom'} | \. | "$RE{'qcontent'}+" ) $RE{'cfws'}*/x;
+$RE{'dword'}            = qr/$RE{'cfws'} (?: $RE{'atom'} | \. | "$RE{'qcontent'}++" ) $RE{'cfws'}/x;
 $RE{'obs-phrase'}       = qr/$RE{'word'} $RE{'dword'}*/x;
 $RE{'obs-display-name'} = $RE{'obs-phrase'};
 $RE{'obs-route'}        = qr/
@@ -259,9 +259,9 @@ $CRE{'obs-addr-spec'}   = qr/($RE{'obs-local-part'})\@($RE{'obs-domain'})/;
 $CRE{'obs-mailbox'} = qr/
     (?:
         ($RE{'obs-display-name'})?
-        ($RE{'cfws'}*)< $RE{'obs-route'}? $CRE{'obs-addr-spec'} >($RE{'cfws'}*)
+        ($RE{'cfws'})< $RE{'obs-route'}? $CRE{'obs-addr-spec'} >($RE{'cfws'})
         |$CRE{'obs-addr-spec'}
-    )($RE{'comment'}*)
+    )($RE{'comment'}*+)
 /x;
 
 sub parse {

commit 6dd5021a6e5df2e8c86a163dc2e180a76a38e63b
Author: sunnavy <sunnavy at bestpractical.com>
Date:   Tue Dec 4 04:54:48 2018 +0800

    Fix pathological backtracking in obs-phrase(i.e. obs-display-name)

diff --git a/lib/Email/Address/List.pm b/lib/Email/Address/List.pm
index 89a8266..87c48f1 100644
--- a/lib/Email/Address/List.pm
+++ b/lib/Email/Address/List.pm
@@ -244,7 +244,7 @@ $CRE{'mailbox'} = qr/
 /x;
 
 $RE{'dword'}            = qr/$RE{'cfws'} (?: $RE{'atom'} | \. | "$RE{'qcontent'}++" ) $RE{'cfws'}/x;
-$RE{'obs-phrase'}       = qr/$RE{'word'} $RE{'dword'}*/x;
+$RE{'obs-phrase'}       = qr/$RE{'word'} $RE{'dword'}*+/x;
 $RE{'obs-display-name'} = $RE{'obs-phrase'};
 $RE{'obs-route'}        = qr/
     (?:$RE{'cfws'}|,)*

commit 31bd4dc2dfb26fd6a17e4436df3d3c8904856f30
Author: sunnavy <sunnavy at bestpractical.com>
Date:   Tue Dec 4 04:56:28 2018 +0800

    Fix pathological backtracking for unkown regex

diff --git a/lib/Email/Address/List.pm b/lib/Email/Address/List.pm
index 87c48f1..bf6ca7c 100644
--- a/lib/Email/Address/List.pm
+++ b/lib/Email/Address/List.pm
@@ -331,12 +331,12 @@ sub parse {
         # if we got here then something unknown on our way
         # try to recorver
         if ($in_group) {
-            if ( $line =~ s/^([^;,"\)]*(?:(?:$RE{'quoted-string'}|$RE{'comment'})[^;,"\)]*)*)(?=;|,)//o ) {
+            if ( $line =~ s/^([^;,"\)]*+(?:(?:$RE{'quoted-string'}|$RE{'comment'})[^;,"\)]*+)*+)(?=;|,)//o ) {
                 push @res, { type => 'unknown', value => $1 } unless $args{'skip_unknown'};
                 next;
             }
         } else {
-            if ( $line =~ s/^([^,"\)]*(?:(?:$RE{'quoted-string'}|$RE{'comment'})[^,"\)]*)*)(?=,)//o ) {
+            if ( $line =~ s/^([^,"\)]*+(?:(?:$RE{'quoted-string'}|$RE{'comment'})[^,"\)]*+)*+)(?=,)//o ) {
                 push @res, { type => 'unknown', value => $1 } unless $args{'skip_unknown'};
                 next;
             }

commit 55083dbabcfd5dd2b811b35d4ec1250eaf50e2b0
Author: sunnavy <sunnavy at bestpractical.com>
Date:   Thu Jan 3 02:37:52 2019 +0800

    Update inc/

diff --git a/META.yml b/META.yml
index 505327b..d025257 100644
--- a/META.yml
+++ b/META.yml
@@ -10,7 +10,7 @@ configure_requires:
   ExtUtils::MakeMaker: 6.59
 distribution_type: module
 dynamic_config: 1
-generated_by: 'Module::Install version 1.06'
+generated_by: 'Module::Install version 1.19'
 license: perl
 meta-spec:
   url: http://module-build.sourceforge.net/META-spec-v1.4.html
diff --git a/inc/Module/Install.pm b/inc/Module/Install.pm
index 4ecf46b..7ba98c2 100644
--- a/inc/Module/Install.pm
+++ b/inc/Module/Install.pm
@@ -17,7 +17,7 @@ package Module::Install;
 #     3. The ./inc/ version of Module::Install loads
 # }
 
-use 5.005;
+use 5.006;
 use strict 'vars';
 use Cwd        ();
 use File::Find ();
@@ -31,7 +31,7 @@ BEGIN {
 	# This is not enforced yet, but will be some time in the next few
 	# releases once we can make sure it won't clash with custom
 	# Module::Install extensions.
-	$VERSION = '1.06';
+	$VERSION = '1.19';
 
 	# Storage for the pseudo-singleton
 	$MAIN    = undef;
@@ -156,10 +156,10 @@ END_DIE
 sub autoload {
 	my $self = shift;
 	my $who  = $self->_caller;
-	my $cwd  = Cwd::cwd();
+	my $cwd  = Cwd::getcwd();
 	my $sym  = "${who}::AUTOLOAD";
 	$sym->{$cwd} = sub {
-		my $pwd = Cwd::cwd();
+		my $pwd = Cwd::getcwd();
 		if ( my $code = $sym->{$pwd} ) {
 			# Delegate back to parent dirs
 			goto &$code unless $cwd eq $pwd;
@@ -239,11 +239,13 @@ sub new {
 
 	# ignore the prefix on extension modules built from top level.
 	my $base_path = Cwd::abs_path($FindBin::Bin);
-	unless ( Cwd::abs_path(Cwd::cwd()) eq $base_path ) {
+	unless ( Cwd::abs_path(Cwd::getcwd()) eq $base_path ) {
 		delete $args{prefix};
 	}
 	return $args{_self} if $args{_self};
 
+	$base_path = VMS::Filespec::unixify($base_path) if $^O eq 'VMS';
+
 	$args{dispatch} ||= 'Admin';
 	$args{prefix}   ||= 'inc';
 	$args{author}   ||= ($^O eq 'VMS' ? '_author' : '.author');
@@ -322,7 +324,7 @@ sub find_extensions {
 	my ($self, $path) = @_;
 
 	my @found;
-	File::Find::find( sub {
+	File::Find::find( {no_chdir => 1, wanted => sub {
 		my $file = $File::Find::name;
 		return unless $file =~ m!^\Q$path\E/(.+)\.pm\Z!is;
 		my $subpath = $1;
@@ -336,9 +338,9 @@ sub find_extensions {
 		# correctly.  Otherwise, root through the file to locate the case-preserved
 		# version of the package name.
 		if ( $subpath eq lc($subpath) || $subpath eq uc($subpath) ) {
-			my $content = Module::Install::_read($subpath . '.pm');
+			my $content = Module::Install::_read($File::Find::name);
 			my $in_pod  = 0;
-			foreach ( split //, $content ) {
+			foreach ( split /\n/, $content ) {
 				$in_pod = 1 if /^=\w/;
 				$in_pod = 0 if /^=cut/;
 				next if ($in_pod || /^=cut/);  # skip pod text
@@ -351,7 +353,7 @@ sub find_extensions {
 		}
 
 		push @found, [ $file, $pkg ];
-	}, $path ) if -d $path;
+	}}, $path ) if -d $path;
 
 	@found;
 }
@@ -373,24 +375,14 @@ sub _caller {
 	return $call;
 }
 
-# Done in evals to avoid confusing Perl::MinimumVersion
-eval( $] >= 5.006 ? <<'END_NEW' : <<'END_OLD' ); die $@ if $@;
 sub _read {
 	local *FH;
 	open( FH, '<', $_[0] ) or die "open($_[0]): $!";
+	binmode FH;
 	my $string = do { local $/; <FH> };
 	close FH or die "close($_[0]): $!";
 	return $string;
 }
-END_NEW
-sub _read {
-	local *FH;
-	open( FH, "< $_[0]"  ) or die "open($_[0]): $!";
-	my $string = do { local $/; <FH> };
-	close FH or die "close($_[0]): $!";
-	return $string;
-}
-END_OLD
 
 sub _readperl {
 	my $string = Module::Install::_read($_[0]);
@@ -411,30 +403,19 @@ sub _readpod {
 	return $string;
 }
 
-# Done in evals to avoid confusing Perl::MinimumVersion
-eval( $] >= 5.006 ? <<'END_NEW' : <<'END_OLD' ); die $@ if $@;
 sub _write {
 	local *FH;
 	open( FH, '>', $_[0] ) or die "open($_[0]): $!";
+	binmode FH;
 	foreach ( 1 .. $#_ ) {
 		print FH $_[$_] or die "print($_[0]): $!";
 	}
 	close FH or die "close($_[0]): $!";
 }
-END_NEW
-sub _write {
-	local *FH;
-	open( FH, "> $_[0]"  ) or die "open($_[0]): $!";
-	foreach ( 1 .. $#_ ) {
-		print FH $_[$_] or die "print($_[0]): $!";
-	}
-	close FH or die "close($_[0]): $!";
-}
-END_OLD
 
 # _version is for processing module versions (eg, 1.03_05) not
 # Perl versions (eg, 5.8.1).
-sub _version ($) {
+sub _version {
 	my $s = shift || 0;
 	my $d =()= $s =~ /(\.)/g;
 	if ( $d >= 2 ) {
@@ -450,12 +431,12 @@ sub _version ($) {
 	return $l + 0;
 }
 
-sub _cmp ($$) {
+sub _cmp {
 	_version($_[1]) <=> _version($_[2]);
 }
 
 # Cloned from Params::Util::_CLASS
-sub _CLASS ($) {
+sub _CLASS {
 	(
 		defined $_[0]
 		and
diff --git a/inc/Module/Install/Base.pm b/inc/Module/Install/Base.pm
index 802844a..9fa42c2 100644
--- a/inc/Module/Install/Base.pm
+++ b/inc/Module/Install/Base.pm
@@ -4,7 +4,7 @@ package Module::Install::Base;
 use strict 'vars';
 use vars qw{$VERSION};
 BEGIN {
-	$VERSION = '1.06';
+	$VERSION = '1.19';
 }
 
 # Suspend handler for "redefined" warnings
diff --git a/inc/Module/Install/Can.pm b/inc/Module/Install/Can.pm
index 22167b8..d65c753 100644
--- a/inc/Module/Install/Can.pm
+++ b/inc/Module/Install/Can.pm
@@ -8,7 +8,7 @@ use Module::Install::Base ();
 
 use vars qw{$VERSION @ISA $ISCORE};
 BEGIN {
-	$VERSION = '1.06';
+	$VERSION = '1.19';
 	@ISA     = 'Module::Install::Base';
 	$ISCORE  = 1;
 }
@@ -121,6 +121,15 @@ END_C
 # Can we locate a (the) C compiler
 sub can_cc {
 	my $self   = shift;
+
+	if ($^O eq 'VMS') {
+		require ExtUtils::CBuilder;
+		my $builder = ExtUtils::CBuilder->new(
+		quiet => 1,
+		);
+		return $builder->have_compiler;
+	}
+
 	my @chunks = split(/ /, $Config::Config{cc}) or return;
 
 	# $Config{cc} may contain args; try to find out the program part
@@ -151,4 +160,4 @@ if ( $^O eq 'cygwin' ) {
 
 __END__
 
-#line 236
+#line 245
diff --git a/inc/Module/Install/Fetch.pm b/inc/Module/Install/Fetch.pm
index bee0c4f..3072b08 100644
--- a/inc/Module/Install/Fetch.pm
+++ b/inc/Module/Install/Fetch.pm
@@ -6,7 +6,7 @@ use Module::Install::Base ();
 
 use vars qw{$VERSION @ISA $ISCORE};
 BEGIN {
-	$VERSION = '1.06';
+	$VERSION = '1.19';
 	@ISA     = 'Module::Install::Base';
 	$ISCORE  = 1;
 }
diff --git a/inc/Module/Install/Makefile.pm b/inc/Module/Install/Makefile.pm
index 7052f36..13a4464 100644
--- a/inc/Module/Install/Makefile.pm
+++ b/inc/Module/Install/Makefile.pm
@@ -8,7 +8,7 @@ use Fcntl qw/:flock :seek/;
 
 use vars qw{$VERSION @ISA $ISCORE};
 BEGIN {
-	$VERSION = '1.06';
+	$VERSION = '1.19';
 	@ISA     = 'Module::Install::Base';
 	$ISCORE  = 1;
 }
@@ -133,7 +133,7 @@ sub makemaker_args {
 	return $args;
 }
 
-# For mm args that take multiple space-seperated args,
+# For mm args that take multiple space-separated args,
 # append an argument to the current list.
 sub makemaker_append {
 	my $self = shift;
diff --git a/inc/Module/Install/Metadata.pm b/inc/Module/Install/Metadata.pm
index 58430f3..11bf971 100644
--- a/inc/Module/Install/Metadata.pm
+++ b/inc/Module/Install/Metadata.pm
@@ -6,7 +6,7 @@ use Module::Install::Base ();
 
 use vars qw{$VERSION @ISA $ISCORE};
 BEGIN {
-	$VERSION = '1.06';
+	$VERSION = '1.19';
 	@ISA     = 'Module::Install::Base';
 	$ISCORE  = 1;
 }
@@ -347,7 +347,7 @@ sub name_from {
 		^ \s*
 		package \s*
 		([\w:]+)
-		\s* ;
+		[\s|;]*
 		/ixms
 	) {
 		my ($name, $module_name) = ($1, $1);
@@ -705,7 +705,7 @@ sub _write_mymeta_data {
 	my @yaml = Parse::CPAN::Meta::LoadFile('META.yml');
 	my $meta = $yaml[0];
 
-	# Overwrite the non-configure dependency hashs
+	# Overwrite the non-configure dependency hashes
 	delete $meta->{requires};
 	delete $meta->{build_requires};
 	delete $meta->{recommends};
diff --git a/inc/Module/Install/ReadmeFromPod.pm b/inc/Module/Install/ReadmeFromPod.pm
index b5e03c3..3738232 100644
--- a/inc/Module/Install/ReadmeFromPod.pm
+++ b/inc/Module/Install/ReadmeFromPod.pm
@@ -7,12 +7,41 @@ use warnings;
 use base qw(Module::Install::Base);
 use vars qw($VERSION);
 
-$VERSION = '0.22';
+$VERSION = '0.30';
+
+{
+
+    # these aren't defined until after _require_admin is run, so
+    # define them so prototypes are available during compilation.
+    sub io;
+    sub capture(&;@);
+
+#line 28
+
+    my $done = 0;
+
+    sub _require_admin {
+
+	# do this once to avoid redefinition warnings from IO::All
+	return if $done;
+
+	require IO::All;
+	IO::All->import( '-binary' );
+
+	require Capture::Tiny;
+	Capture::Tiny->import ( 'capture' );
+
+	return;
+    }
+
+}
 
 sub readme_from {
   my $self = shift;
   return unless $self->is_admin;
 
+  _require_admin;
+
   # Input file
   my $in_file  = shift || $self->_all_from
     or die "Can't determine file to make readme_from";
@@ -50,6 +79,8 @@ sub readme_from {
     $out_file = $self->_readme_htm($in_file, $out_file, $options);
   } elsif ($format eq 'man') {
     $out_file = $self->_readme_man($in_file, $out_file, $options);
+  } elsif ($format eq 'md') {
+    $out_file = $self->_readme_md($in_file, $out_file, $options);
   } elsif ($format eq 'pdf') {
     $out_file = $self->_readme_pdf($in_file, $out_file, $options);
   }
@@ -67,10 +98,10 @@ sub _readme_txt {
   $out_file ||= 'README';
   require Pod::Text;
   my $parser = Pod::Text->new( @$options );
-  open my $out_fh, '>', $out_file or die "Could not write file $out_file:\n$!\n";
+  my $io = io->file($out_file)->open(">");
+  my $out_fh = $io->io_handle;
   $parser->output_fh( *$out_fh );
   $parser->parse_file( $in_file );
-  close $out_fh;
   return $out_file;
 }
 
@@ -79,11 +110,14 @@ sub _readme_htm {
   my ($self, $in_file, $out_file, $options) = @_;
   $out_file ||= 'README.htm';
   require Pod::Html;
-  Pod::Html::pod2html(
-    "--infile=$in_file",
-    "--outfile=$out_file",
-    @$options,
-  );
+  my ($o) = capture {
+    Pod::Html::pod2html(
+      "--infile=$in_file",
+      "--outfile=-",
+      @$options,
+    );
+  };
+  io->file($out_file)->print($o);
   # Remove temporary files if needed
   for my $file ('pod2htmd.tmp', 'pod2htmi.tmp') {
     if (-e $file) {
@@ -99,7 +133,10 @@ sub _readme_man {
   $out_file ||= 'README.1';
   require Pod::Man;
   my $parser = Pod::Man->new( @$options );
-  $parser->parse_from_file($in_file, $out_file);
+  my $io = io->file($out_file)->open(">");
+  my $out_fh = $io->io_handle;
+  $parser->output_fh( *$out_fh );
+  $parser->parse_file( $in_file );
   return $out_file;
 }
 
@@ -111,11 +148,20 @@ sub _readme_pdf {
     or die "Could not generate $out_file because pod2pdf could not be found\n";
   my $parser = App::pod2pdf->new( @$options );
   $parser->parse_from_file($in_file);
-  open my $out_fh, '>', $out_file or die "Could not write file $out_file:\n$!\n";
-  select $out_fh;
-  $parser->output;
-  select STDOUT;
-  close $out_fh;
+  my ($o) = capture { $parser->output };
+  io->file($out_file)->print($o);
+  return $out_file;
+}
+
+sub _readme_md {
+  my ($self, $in_file, $out_file, $options) = @_;
+  $out_file ||= 'README.md';
+  require Pod::Markdown;
+  my $parser = Pod::Markdown->new( @$options );
+  my $io = io->file($out_file)->open(">");
+  my $out_fh = $io->io_handle;
+  $parser->output_fh( *$out_fh );
+  $parser->parse_file( $in_file );
   return $out_file;
 }
 
@@ -134,5 +180,5 @@ sub _all_from {
 
 __END__
 
-#line 254
+#line 316
 
diff --git a/inc/Module/Install/Win32.pm b/inc/Module/Install/Win32.pm
index eeaa3fe..f7aa615 100644
--- a/inc/Module/Install/Win32.pm
+++ b/inc/Module/Install/Win32.pm
@@ -6,7 +6,7 @@ use Module::Install::Base ();
 
 use vars qw{$VERSION @ISA $ISCORE};
 BEGIN {
-	$VERSION = '1.06';
+	$VERSION = '1.19';
 	@ISA     = 'Module::Install::Base';
 	$ISCORE  = 1;
 }
diff --git a/inc/Module/Install/WriteAll.pm b/inc/Module/Install/WriteAll.pm
index 85d8018..2db861a 100644
--- a/inc/Module/Install/WriteAll.pm
+++ b/inc/Module/Install/WriteAll.pm
@@ -6,7 +6,7 @@ use Module::Install::Base ();
 
 use vars qw{$VERSION @ISA $ISCORE};
 BEGIN {
-	$VERSION = '1.06';
+	$VERSION = '1.19';
 	@ISA     = qw{Module::Install::Base};
 	$ISCORE  = 1;
 }

commit 4636bb834918a6cc3b9e62582d5cf930b0719cd9
Author: sunnavy <sunnavy at bestpractical.com>
Date:   Thu Jan 3 02:40:01 2019 +0800

    Add manifest to git

diff --git a/MANIFEST b/MANIFEST
new file mode 100644
index 0000000..47fdc00
--- /dev/null
+++ b/MANIFEST
@@ -0,0 +1,25 @@
+Changes
+inc/Module/Install.pm
+inc/Module/Install/Base.pm
+inc/Module/Install/Can.pm
+inc/Module/Install/Fetch.pm
+inc/Module/Install/Makefile.pm
+inc/Module/Install/Metadata.pm
+inc/Module/Install/ReadmeFromPod.pm
+inc/Module/Install/Win32.pm
+inc/Module/Install/WriteAll.pm
+lib/Email/Address/List.pm
+Makefile.PL
+MANIFEST			This list of files
+META.yml
+README
+t/basics.t
+t/data/RFC5233.single.obs.json
+t/data/RFC5233.single.obs.txt
+t/data/RFC5233.single.valid.json
+t/data/RFC5233.single.valid.txt
+t/generate.pl
+t/invalid.t
+t/pathological.t
+t/random.combinations.t
+t/single.suit.t

commit d3dc87f4cdaf926f9ef92f466aea85a84688df86
Author: sunnavy <sunnavy at bestpractical.com>
Date:   Thu Jan 3 02:37:32 2019 +0800

    Release 0.06

diff --git a/Changes b/Changes
index fdce7a5..fe47000 100644
--- a/Changes
+++ b/Changes
@@ -1,3 +1,9 @@
+0.06 2019-01-02
+
+ - Fix pathological backtracking for unkown regex
+ - Fix pathological backtracking in obs-phrase(i.e. obs-display-name)
+ - Fix pathological backtracking in cfws, quoted strings
+
 0.05 2014-02-16
 
  - Correct typos in documentation; no functionality changes
diff --git a/META.yml b/META.yml
index d025257..150a30d 100644
--- a/META.yml
+++ b/META.yml
@@ -26,4 +26,4 @@ requires:
   perl: 5.10.0
 resources:
   license: http://dev.perl.org/licenses/
-version: 0.05
+version: '0.06'
diff --git a/lib/Email/Address/List.pm b/lib/Email/Address/List.pm
index bf6ca7c..130811a 100644
--- a/lib/Email/Address/List.pm
+++ b/lib/Email/Address/List.pm
@@ -4,7 +4,7 @@ use 5.010;
 
 package Email::Address::List;
 
-our $VERSION = '0.05';
+our $VERSION = '0.06';
 use Email::Address;
 
 =head1 NAME

commit c01eb7998a0b6fbdef3934622ec4b7754cffb335
Author: Jim Brandt <jbrandt at bestpractical.com>
Date:   Wed Jan 23 13:06:03 2019 -0500

    Update Changes file with additional details

diff --git a/Changes b/Changes
index fe47000..7442a14 100644
--- a/Changes
+++ b/Changes
@@ -1,8 +1,11 @@
 0.06 2019-01-02
 
- - Fix pathological backtracking for unkown regex
- - Fix pathological backtracking in obs-phrase(i.e. obs-display-name)
- - Fix pathological backtracking in cfws, quoted strings
+ - Changes to address CVE-2018-18898 which could allow DDoS-type attacks.
+   Thanks to Lukas Kramer for reporting the issue and Alex Vandiver for
+   contributing fixes.
+   - Fix pathological backtracking for unkown regex
+   - Fix pathological backtracking in obs-phrase(i.e. obs-display-name)
+   - Fix pathological backtracking in cfws, quoted strings
 
 0.05 2014-02-16
 

-----------------------------------------------------------------------


More information about the Bps-public-commit mailing list