Update MIME-Base64 to CPAN version 3.10
authorChris 'BinGOs' Williams <chris@bingosnet.co.uk>
Fri, 12 Nov 2010 00:03:47 +0000 (00:03 +0000)
committerChris 'BinGOs' Williams <chris@bingosnet.co.uk>
Fri, 12 Nov 2010 00:03:47 +0000 (00:03 +0000)
  [DELTA]

  Release 3.10

  Provide functions to calculate the length of encoded and decoded
  base64 strings [RT#62404]

MANIFEST
Porting/Maintainers.pl
cpan/MIME-Base64/Base64.pm
cpan/MIME-Base64/Base64.xs
cpan/MIME-Base64/Changes
cpan/MIME-Base64/Makefile.PL
cpan/MIME-Base64/QuotedPrint.pm
cpan/MIME-Base64/t/length.t [new file with mode: 0644]
pod/perldelta.pod

index 06ae5e4..6f7c568 100644 (file)
--- a/MANIFEST
+++ b/MANIFEST
@@ -1379,6 +1379,7 @@ cpan/MIME-Base64/Makefile.PL              MIME::Base64 extension
 cpan/MIME-Base64/QuotedPrint.pm                MIME::Base64 extension
 cpan/MIME-Base64/README                        README for MIME::Base64
 cpan/MIME-Base64/t/base64.t            See whether MIME::Base64 works
+cpan/MIME-Base64/t/length.t    See whether MIME::QuotedPrint works
 cpan/MIME-Base64/t/quoted-print.t      See whether MIME::QuotedPrint works
 cpan/MIME-Base64/t/unicode.t           See whether MIME::Base64 works
 cpan/MIME-Base64/t/warn.t              See whether MIME::Base64 works
index 3a954e7..a055a5c 100755 (executable)
@@ -927,7 +927,7 @@ use File::Glob qw(:case);
     'MIME::Base64' =>
        {
        'MAINTAINER'    => 'gaas',
-       'DISTRIBUTION'  => 'GAAS/MIME-Base64-3.09.tar.gz',
+       'DISTRIBUTION'  => 'GAAS/MIME-Base64-3.10.tar.gz',
        'FILES'         => q[cpan/MIME-Base64],
        'EXCLUDED'      => [ qw{ t/bad-sv.t }, ],
        'UPSTREAM'      => 'cpan',
index 2bcd585..758becc 100644 (file)
@@ -1,13 +1,14 @@
 package MIME::Base64;
 
 use strict;
-use vars qw(@ISA @EXPORT $VERSION);
+use vars qw(@ISA @EXPORT @EXPORT_OK $VERSION);
 
 require Exporter;
 @ISA = qw(Exporter);
 @EXPORT = qw(encode_base64 decode_base64);
+@EXPORT_OK = qw(encoded_base64_length decoded_base64_length);
 
-$VERSION = '3.09';
+$VERSION = '3.10';
 
 require XSLoader;
 XSLoader::load('MIME::Base64', $VERSION);
@@ -39,7 +40,7 @@ arbitrary sequences of octets in a form that need not be humanly
 readable. A 65-character subset ([A-Za-z0-9+/=]) of US-ASCII is used,
 enabling 6 bits to be represented per printable character.
 
-The following functions are provided:
+The following primary functions are provided:
 
 =over 4
 
@@ -78,6 +79,26 @@ call them as:
     $encoded = MIME::Base64::encode($decoded);
     $decoded = MIME::Base64::decode($encoded);
 
+Additional functions not exported by default:
+
+=over 4
+
+=item encoded_base64_length($str)
+
+=item encoded_base64_length($str, $eol)
+
+Returns the length that the encoded string would have without actually
+encoding it.  This will return the same value as C<< length(encode_base64($str)) >>,
+but should be more efficient.
+
+=item decoded_base64_length($str)
+
+Returns the length that the decoded string would have without actually
+decoding it.  This will return the same value as C<< length(decode_base64($str)) >>,
+but should be more efficient.
+
+=back
+
 =head1 DIAGNOSTICS
 
 The following warnings can be generated if perl is invoked with the
index 279aad9..aa53898 100644 (file)
@@ -255,6 +255,64 @@ decode_base64(sv)
        OUTPUT:
        RETVAL
 
+int
+encoded_base64_length(sv,...)
+       SV* sv
+       PROTOTYPE: $;$
+
+       PREINIT:
+       SSize_t len;   /* length of the string */
+       STRLEN eollen; /* length of the EOL sequence */
+
+       CODE:
+#if PERL_REVISION == 5 && PERL_VERSION >= 6
+       sv_utf8_downgrade(sv, FALSE);
+#endif
+       len = SvCUR(sv);
+
+       if (items > 1 && SvOK(ST(1))) {
+           eollen = SvCUR(ST(1));
+       } else {
+           eollen = 1;
+       }
+
+       RETVAL = (len+2) / 3 * 4;        /* encoded bytes */
+       if (RETVAL) {
+           RETVAL += ((RETVAL-1) / MAX_LINE + 1) * eollen;
+       }
+
+       OUTPUT:
+       RETVAL
+
+int
+decoded_base64_length(sv)
+       SV* sv
+       PROTOTYPE: $
+
+       PREINIT:
+       STRLEN len;
+       register unsigned char *str = (unsigned char*)SvPVbyte(sv, len);
+       unsigned char const* end = str + len;
+       int i = 0;
+
+       CODE:
+       RETVAL = 0;
+       while (str < end) {
+           unsigned char uc = index_64[NATIVE_TO_ASCII(*str++)];
+           if (uc == INVALID)
+               continue;
+           if (uc == EQ)
+               break;
+           if (i++) {
+               RETVAL++;
+               if (i == 4)
+                   i = 0;
+           }
+       }
+
+       OUTPUT:
+       RETVAL
+
 
 MODULE = MIME::Base64          PACKAGE = MIME::QuotedPrint
 
index 595c8dc..a6f85bd 100644 (file)
@@ -1,3 +1,12 @@
+2010-10-11   Gisle Aas <gisle@ActiveState.com>
+
+   Release 3.10
+
+   Provide functions to calculate the length of encoded and decoded
+   base64 strings [RT#62404]
+
+
+
 2010-01-25   Gisle Aas <gisle@ActiveState.com>
 
    Release 3.09
index 7300447..8307d2c 100644 (file)
@@ -10,4 +10,36 @@ WriteMakefile(
     NAME        => 'MIME::Base64',
     VERSION_FROM => 'Base64.pm',
     @makefileopts,
+
+    ABSTRACT     => 'The RFC 2045 encodings; base64 and quoted-printable',
+    AUTHOR       => 'Gisle Aas <gisle@activestate.com>',
+    LICENSE      => 'perl',
+    MIN_PERL_VERSION => 5.006,
+    META_MERGE   => {
+        resources  => {
+            repository => 'http://github.com/gisle/mime-base64',
+        }
+    },
 );
+
+BEGIN {
+    # compatibility with older versions of MakeMaker
+    my $developer = -d ".git";
+    my %mm_req = (
+        LICENCE => 6.31,
+        META_MERGE => 6.45,
+        META_ADD => 6.45,
+        MIN_PERL_VERSION => 6.48,
+    );
+    undef(*WriteMakefile);
+    *WriteMakefile = sub {
+        my %arg = @_;
+        for (keys %mm_req) {
+            unless (eval { ExtUtils::MakeMaker->VERSION($mm_req{$_}) }) {
+                warn "$_ $@" if $developer;
+                delete $arg{$_};
+            }
+        }
+        ExtUtils::MakeMaker::WriteMakefile(%arg);
+    };
+}
index ca3a042..7b03e69 100644 (file)
@@ -7,7 +7,7 @@ require Exporter;
 @ISA = qw(Exporter);
 @EXPORT = qw(encode_qp decode_qp);
 
-$VERSION = "3.09";
+$VERSION = "3.10";
 
 use MIME::Base64;  # will load XS version of {en,de}code_qp()
 
diff --git a/cpan/MIME-Base64/t/length.t b/cpan/MIME-Base64/t/length.t
new file mode 100644 (file)
index 0000000..116838a
--- /dev/null
@@ -0,0 +1,49 @@
+#!perl -w
+
+use strict;
+use Test qw(plan ok);
+
+plan tests => 129;
+
+use MIME::Base64 qw(encode_base64 encoded_base64_length decoded_base64_length);
+*elen = *encoded_base64_length;
+*dlen = *decoded_base64_length;
+
+ok(elen(""), 0);
+ok(elen("a"), 5);
+ok(elen("aa"), 5);
+ok(elen("aaa"), 5);
+ok(elen("aaaa"), 9);
+ok(elen("aaaaa"), 9);
+
+ok(elen("", ""), 0);
+ok(elen("a", ""), 4);
+ok(elen("aa", ""), 4);
+ok(elen("aaa", ""), 4);
+ok(elen("aaaa", ""), 8);
+ok(elen("aaaaa", ""), 8);
+
+ok(dlen(""), 0);
+ok(dlen("a"), 0);
+ok(dlen("aa"), 1);
+ok(dlen("aaa"), 2);
+ok(dlen("aaaa"), 3);
+ok(dlen("aaaaa"), 3);
+ok(dlen("aaaaaa"), 4);
+ok(dlen("aaaaaaa"), 5);
+ok(dlen("aaaaaaaa"), 6);
+
+ok(dlen("=aaaa"), 0);
+ok(dlen("a=aaa"), 0);
+ok(dlen("aa=aa"), 1);
+ok(dlen("aaa=a"), 2);
+ok(dlen("aaaa="), 3);
+
+ok(dlen("a\na\na a"), 3);
+
+for my $i (50..100) {
+    my $a = "a" x $i;
+    my $a_enc = encode_base64($a);
+    ok(elen($a), length($a_enc));
+    ok(dlen($a_enc), $i);
+}
index 82f3ca1..31fa0e9 100644 (file)
@@ -361,6 +361,13 @@ C<Math::BigInt::FastCalc> has been upgraded from 0.22 to 0.24.
 
 =item *
 
+C<MIME::Base64> has been upgraded from 3.09 to 3.10
+
+Includes new functions to calculate the length of encoded and decoded
+base64 strings.
+
+=item *
+
 C<mro> has been upgraded from 1.04 to 1.05.
 
 =item *