summaryrefslogtreecommitdiff
path: root/cpan
diff options
context:
space:
mode:
Diffstat (limited to 'cpan')
-rw-r--r--cpan/Compress-Raw-Bzip2/Bzip2.xs14
-rw-r--r--cpan/Compress-Raw-Bzip2/lib/Compress/Raw/Bzip2.pm4
-rw-r--r--cpan/Compress-Raw-Bzip2/t/000prereq.t2
-rw-r--r--cpan/Compress-Raw-Bzip2/t/19nonpv.t91
4 files changed, 102 insertions, 9 deletions
diff --git a/cpan/Compress-Raw-Bzip2/Bzip2.xs b/cpan/Compress-Raw-Bzip2/Bzip2.xs
index 825724424a..17924c7898 100644
--- a/cpan/Compress-Raw-Bzip2/Bzip2.xs
+++ b/cpan/Compress-Raw-Bzip2/Bzip2.xs
@@ -485,6 +485,7 @@ bzdeflate (s, buf, output)
uInt increment = NO_INIT
int RETVAL = 0;
uInt bufinc = NO_INIT
+ STRLEN origlen = NO_INIT
CODE:
bufinc = s->bufsize;
@@ -496,8 +497,8 @@ bzdeflate (s, buf, output)
if (DO_UTF8(buf) && !sv_utf8_downgrade(buf, 1))
croak("Wide character in " COMPRESS_CLASS "::bzdeflate input parameter");
#endif
- s->stream.next_in = (char*)SvPV_nomg_nolen(buf) ;
- s->stream.avail_in = SvCUR(buf) ;
+ s->stream.next_in = (char*)SvPV_nomg(buf, origlen) ;
+ s->stream.avail_in = origlen;
/* and retrieve the output buffer */
output = deRef_l(output, "deflate") ;
@@ -532,7 +533,7 @@ bzdeflate (s, buf, output)
}
s->compressedBytes += cur_length + increment - s->stream.avail_out ;
- s->uncompressedBytes += SvCUR(buf) - s->stream.avail_in ;
+ s->uncompressedBytes += origlen - s->stream.avail_in ;
s->last_error = RETVAL ;
if (RETVAL == BZ_RUN_OK) {
@@ -725,6 +726,7 @@ bzinflate (s, buf, output)
uInt increment = 0;
uInt bufinc = NO_INIT
STRLEN na = NO_INIT ;
+ STRLEN origlen = NO_INIT
PREINIT:
#ifdef UTF8_AVAILABLE
bool out_utf8 = FALSE;
@@ -745,8 +747,8 @@ bzinflate (s, buf, output)
#endif
/* initialise the input buffer */
- s->stream.next_in = (char*)SvPV_nomg_nolen(buf) ;
- s->stream.avail_in = SvCUR(buf);
+ s->stream.next_in = (char*)SvPV_nomg(buf, origlen) ;
+ s->stream.avail_in = origlen;
/* and retrieve the output buffer */
output = deRef_l(output, "bzinflate") ;
@@ -824,7 +826,7 @@ bzinflate (s, buf, output)
s->bytesInflated = cur_length + increment - s->stream.avail_out - prefix_length;
s->uncompressedBytes += s->bytesInflated ;
- s->compressedBytes += SvCUR(buf) - s->stream.avail_in ;
+ s->compressedBytes += origlen - s->stream.avail_in ;
SvPOK_only(output);
SvCUR_set(output, prefix_length + s->bytesInflated) ;
diff --git a/cpan/Compress-Raw-Bzip2/lib/Compress/Raw/Bzip2.pm b/cpan/Compress-Raw-Bzip2/lib/Compress/Raw/Bzip2.pm
index dd54517518..037ba43715 100644
--- a/cpan/Compress-Raw-Bzip2/lib/Compress/Raw/Bzip2.pm
+++ b/cpan/Compress-Raw-Bzip2/lib/Compress/Raw/Bzip2.pm
@@ -11,7 +11,7 @@ use Carp ;
use bytes ;
our ($VERSION, $XS_VERSION, @ISA, @EXPORT, $AUTOLOAD);
-$VERSION = '2.063';
+$VERSION = '2.064';
$XS_VERSION = $VERSION;
$VERSION = eval $VERSION;
@@ -378,7 +378,7 @@ See the Changes file.
=head1 COPYRIGHT AND LICENSE
-Copyright (c) 2005-2013 Paul Marquess. All rights reserved.
+Copyright (c) 2005-2014 Paul Marquess. All rights reserved.
This program is free software; you can redistribute it and/or
modify it under the same terms as Perl itself.
diff --git a/cpan/Compress-Raw-Bzip2/t/000prereq.t b/cpan/Compress-Raw-Bzip2/t/000prereq.t
index a93ee9a217..df43d677b1 100644
--- a/cpan/Compress-Raw-Bzip2/t/000prereq.t
+++ b/cpan/Compress-Raw-Bzip2/t/000prereq.t
@@ -19,7 +19,7 @@ BEGIN
if eval { require Test::NoWarnings ; import Test::NoWarnings; 1 };
- my $VERSION = '2.063';
+ my $VERSION = '2.064';
my @NAMES = qw(
);
diff --git a/cpan/Compress-Raw-Bzip2/t/19nonpv.t b/cpan/Compress-Raw-Bzip2/t/19nonpv.t
new file mode 100644
index 0000000000..15d53b92ca
--- /dev/null
+++ b/cpan/Compress-Raw-Bzip2/t/19nonpv.t
@@ -0,0 +1,91 @@
+BEGIN {
+ if ($ENV{PERL_CORE}) {
+ chdir 't' if -d 't';
+ @INC = ("../lib", "lib/compress");
+ }
+}
+
+use lib qw(t t/compress);
+use strict;
+use warnings;
+
+use Test::More ;
+use CompTestUtils;
+
+BEGIN
+{
+ # use Test::NoWarnings, if available
+ my $extra = 0 ;
+ $extra = 1
+ if eval { require Test::NoWarnings ; import Test::NoWarnings; 1 };
+
+ plan tests => 21 + $extra ;
+
+ use_ok('Compress::Raw::Bzip2', 2) ;
+}
+
+
+
+my $hello = <<EOM ;
+hello world
+this is a test
+EOM
+
+my $len = length $hello ;
+
+
+{
+
+ title "bzdeflate/bzinflate - non-PV buffers";
+ # ==============================
+
+ my $hello = *hello;
+ $hello = *hello;
+ my ($err, $x, $X, $status);
+
+ ok( ($x, $err) = new Compress::Raw::Bzip2(0), "Create bzdeflate object" );
+ ok $x, "Compress::Raw::Bzip2 ok" ;
+ cmp_ok $err, '==', BZ_OK, "status is BZ_OK" ;
+
+ is $x->uncompressedBytes(), 0, "uncompressedBytes() == 0" ;
+ is $x->compressedBytes(), 0, "compressedBytes() == 0" ;
+
+ my $Answer = *Answer;
+ $Answer = *Answer;
+ $status = $x->bzdeflate($hello, $Answer) ;
+ cmp_ok $status, '==', BZ_RUN_OK, "bzdeflate returned BZ_RUN_OK" ;
+
+ $X = *X;
+ cmp_ok $x->bzflush($X), '==', BZ_RUN_OK, "bzflush returned BZ_RUN_OK" ;
+ $Answer .= $X ;
+
+ is $x->uncompressedBytes(), length $hello, "uncompressedBytes ok" ;
+ is $x->compressedBytes(), length $Answer, "compressedBytes ok" ;
+
+ $X = *X;
+ cmp_ok $x->bzclose($X), '==', BZ_STREAM_END, "bzclose returned BZ_STREAM_END";
+ $Answer .= $X ;
+
+ my @Answer = split('', $Answer) ;
+
+ my $k;
+ ok(($k, $err) = new Compress::Raw::Bunzip2(0, 0));
+ ok $k, "Compress::Raw::Bunzip2 ok" ;
+ cmp_ok $err, '==', BZ_OK, "status is BZ_OK" ;
+
+ is $k->compressedBytes(), 0, "compressedBytes() == 0" ;
+ is $k->uncompressedBytes(), 0, "uncompressedBytes() == 0" ;
+ my $GOT = *GOT;
+ $GOT = *GOT;
+ my $Z;
+ $status = $k->bzinflate($Answer, $GOT) ;
+
+
+ cmp_ok $status, '==', BZ_STREAM_END, "Got BZ_STREAM_END" ;
+ is $GOT, $hello, "uncompressed data matches ok" ;
+ is $k->compressedBytes(), length $Answer, "compressedBytes ok" ;
+ is $k->uncompressedBytes(), length $hello , "uncompressedBytes ok";
+
+}
+
+