diff options
author | Chris Williams <chris@bingosnet.co.uk> | 2010-01-09 09:37:30 +0000 |
---|---|---|
committer | Chris Williams <chris@bingosnet.co.uk> | 2010-01-09 09:37:30 +0000 |
commit | 35fe4187b13e55333f87abc0091ce2732e9382fb (patch) | |
tree | 676b747b4693a6fd371228124e95f74f6c2498bc /cpan | |
parent | 7fa38291524c327a3cb23bfe94979e1537743cac (diff) | |
download | perl-35fe4187b13e55333f87abc0091ce2732e9382fb.tar.gz |
Update Archive-Extract to cpan version 0.38
Changes for 0.38 Wed Jan 6 23:48:52 2010
============================================
* Apply a patch from Michael G Schwern RT #53246
extract() is vulnerable to print globals.
Diffstat (limited to 'cpan')
-rw-r--r-- | cpan/Archive-Extract/lib/Archive/Extract.pm | 23 | ||||
-rw-r--r-- | cpan/Archive-Extract/t/01_Archive-Extract.t | 5 |
2 files changed, 21 insertions, 7 deletions
diff --git a/cpan/Archive-Extract/lib/Archive/Extract.pm b/cpan/Archive-Extract/lib/Archive/Extract.pm index 5baa79e42e..08676fb1e0 100644 --- a/cpan/Archive-Extract/lib/Archive/Extract.pm +++ b/cpan/Archive-Extract/lib/Archive/Extract.pm @@ -41,7 +41,7 @@ use vars qw[$VERSION $PREFER_BIN $PROGRAMS $WARN $DEBUG $_ALLOW_BIN $_ALLOW_PURE_PERL $_ALLOW_TAR_ITER ]; -$VERSION = '0.36'; +$VERSION = '0.38'; $PREFER_BIN = 0; $WARN = 1; $DEBUG = 0; @@ -899,7 +899,7 @@ sub _gunzip_bin { $self->_error( $self->_no_buffer_content( $self->archive ) ); } - print $fh $buffer if defined $buffer; + $self->_print($fh, $buffer) if defined $buffer; close $fh; @@ -929,7 +929,7 @@ sub _gunzip_cz { $self->_gunzip_to, $! )); my $buffer; - $fh->print($buffer) while $gz->gzread($buffer) > 0; + $self->_print($fh, $buffer) while $gz->gzread($buffer) > 0; $fh->close; ### set what files where extract, and where they went ### @@ -974,7 +974,7 @@ sub _uncompress_bin { $self->_error( $self->_no_buffer_content( $self->archive ) ); } - print $fh $buffer if defined $buffer; + $self->_print($fh, $buffer) if defined $buffer; close $fh; @@ -1190,7 +1190,7 @@ sub _bunzip2_bin { $self->_error( $self->_no_buffer_content( $self->archive ) ); } - print $fh $buffer if defined $buffer; + $self->_print($fh, $buffer) if defined $buffer; close $fh; @@ -1292,7 +1292,7 @@ sub _unlzma_bin { $self->_error( $self->_no_buffer_content( $self->archive ) ); } - print $fh $buffer if defined $buffer; + $self->_print($fh, $buffer) if defined $buffer; close $fh; @@ -1324,7 +1324,7 @@ sub _unlzma_cz { $self->archive, $@)); } - print $fh $buffer if defined $buffer; + $self->_print($fh, $buffer) if defined $buffer; close $fh; @@ -1341,6 +1341,15 @@ sub _unlzma_cz { # ################################# +# For printing binaries that avoids interfering globals +sub _print { + my $self = shift; + my $fh = shift; + + local( $\, $", $, ) = ( undef, ' ', '' ); + return print $fh @_; +} + sub _error { my $self = shift; my $error = shift; diff --git a/cpan/Archive-Extract/t/01_Archive-Extract.t b/cpan/Archive-Extract/t/01_Archive-Extract.t index 52decf6faa..93c9026610 100644 --- a/cpan/Archive-Extract/t/01_Archive-Extract.t +++ b/cpan/Archive-Extract/t/01_Archive-Extract.t @@ -65,6 +65,11 @@ $Archive::Extract::WARN = $Archive::Extract::WARN = $Debug; diag( "\n\n*** DEBUG INFORMATION ENABLED ***\n\n" ) if $Debug; +# Be as evil as possible to print +$\ = "ORS_FLAG"; +$, = "OFS_FLAG"; +$" = "LISTSEP_FLAG"; + my $tmpl = { ### plain files 'x.bz2' => { programs => [qw[bunzip2]], |