[Orca-checkins] rev 245 - in trunk/orca: . packages/Digest-MD5-2.24 packages/Digest-MD5-2.26 packages/Digest-MD5-2.26/t

Blair Zajac blair at orcaware.com
Tue Jul 22 11:35:20 PDT 2003


Author: blair
Date: Tue Jul 22 11:34:45 2003
New Revision: 245

Added:
   trunk/orca/packages/Digest-MD5-2.26/
      - copied from rev 244, trunk/orca/packages/Digest-MD5-2.24/
Removed:
   trunk/orca/packages/Digest-MD5-2.24/
Modified:
   trunk/orca/INSTALL
   trunk/orca/configure.in
   trunk/orca/packages/Digest-MD5-2.26/Changes
   trunk/orca/packages/Digest-MD5-2.26/MD5.pm
   trunk/orca/packages/Digest-MD5-2.26/MD5.xs
   trunk/orca/packages/Digest-MD5-2.26/Makefile.PL
   trunk/orca/packages/Digest-MD5-2.26/t/badfile.t
   trunk/orca/packages/Digest-MD5-2.26/t/files.t
Log:
Upgrade Digest::MD5 from 2.24 to 2.26 and require the new version for
Orca.

* INSTALL:
  Update all references to Digest::MD5's version number from 2.24 to
  2.26.

* configure.in:
  Bump Digest::MD5's version number to 2.26.

* packages/Digest-MD5-2.26:
  Renamed from packages/Digest-MD5-2.24.  Directory contents updated
  from Digest-MD5-2.26.tar.gz.


Modified: trunk/orca/INSTALL
==============================================================================
--- trunk/orca/INSTALL	(original)
+++ trunk/orca/INSTALL	Tue Jul 22 11:34:45 2003
@@ -173,7 +173,7 @@
     Data::Dumper            >= 2.101       >= 2.101     2.101
     Date::Parse             Not required by Orca        2.24
     Devel::DProf            Not required by Orca        19990108
-    Digest::MD5             >= 2.24        >= 2.24      2.24
+    Digest::MD5             >= 2.26        >= 2.26      2.26
     Math::IntervalSearch    >= 1.05        >= 1.05      1.05
     RRDs                    >= 1.000431    >= 1.0.43    1.0.43
     Storable                >= 2.07        >= 2.07      2.07
@@ -227,10 +227,10 @@
 
     Digest::MD5
 
-      http://www.perl.com/CPAN/authors/id/G/GA/GAAS/Digest-MD5-2.24.tar.gz
+      http://www.perl.com/CPAN/authors/id/G/GA/GAAS/Digest-MD5-2.26.tar.gz
 
-      % gunzip -c Digest-MD5-2.24.tar.gz | tar xvf -
-      % cd Digest-MD5-2.24
+      % gunzip -c Digest-MD5-2.26.tar.gz | tar xvf -
+      % cd Digest-MD5-2.26
       % perl Makefile.PL
       % make
       % make test

Modified: trunk/orca/configure.in
==============================================================================
--- trunk/orca/configure.in	(original)
+++ trunk/orca/configure.in	Tue Jul 22 11:34:45 2003
@@ -33,8 +33,8 @@
 DATE_PARSE_VER=2.24
 DEVEL_DPROF_DIR=DProf-19990108
 DEVEL_DPROF_VER=19990108
-DIGEST_MD5_DIR=Digest-MD5-2.24
-DIGEST_MD5_VER=2.24
+DIGEST_MD5_DIR=Digest-MD5-2.26
+DIGEST_MD5_VER=2.26
 MATH_INTERVALSEARCH_DIR=Math-Interpolate-1.05
 MATH_INTERVALSEARCH_VER=1.05
 RRDTOOL_DIR=rrdtool-1.0.43

Modified: trunk/orca/packages/Digest-MD5-2.26/Changes
==============================================================================
--- trunk/orca/packages/Digest-MD5-2.24/Changes	(original)
+++ trunk/orca/packages/Digest-MD5-2.26/Changes	Tue Jul 22 11:34:45 2003
@@ -1,3 +1,33 @@
+2003-07-21   Gisle Aas <gisle at ActiveState.com>
+
+   Release 2.26
+
+   Don't assume PerlIO_read() works like fread() even though
+   it was documented like that for perl 5.6.  It returns negative
+   on read failure.
+
+   Kill test #3 in t/badfile.t.  I don't know a reliable way
+   to test read failures on a file handle.  Seems better not to
+   test than to make many worry.
+
+
+
+2003-07-04   Gisle Aas <gisle at ActiveState.com>
+
+   Release 2.25
+
+   The $md5->addfile method now croaks if it discovers
+   errors on the handle after reading from it.  This should
+   make it more difficult to end up with the wrong digest
+   just because you are to lazy to check the error status
+   on your file handles after reading from them.
+
+   Improved documentation.
+
+   Sync up with bleadperl; even safer patchlevel include.
+
+
+
 2003-03-09   Gisle Aas <gisle at ActiveState.com>
 
    Release 2.24

Modified: trunk/orca/packages/Digest-MD5-2.26/MD5.pm
==============================================================================
--- trunk/orca/packages/Digest-MD5-2.24/MD5.pm	(original)
+++ trunk/orca/packages/Digest-MD5-2.26/MD5.pm	Tue Jul 22 11:34:45 2003
@@ -3,7 +3,7 @@
 use strict;
 use vars qw($VERSION @ISA @EXPORT_OK);
 
-$VERSION = '2.24';  # $Date: 2003/03/09 15:23:10 $
+$VERSION = '2.26';  # $Date: 2003/07/22 06:09:50 $
 
 require Exporter;
 *import = \&Exporter::import;
@@ -43,7 +43,7 @@
 =head1 SYNOPSIS
 
  # Functional style
- use Digest::MD5  qw(md5 md5_hex md5_base64);
+ use Digest::MD5 qw(md5 md5_hex md5_base64);
 
  $digest = md5($data);
  $digest = md5_hex($data);
@@ -72,80 +72,111 @@
 use, as well as an object oriented interface that can handle messages
 of arbitrary length and which can read files directly.
 
-A binary digest will be 16 bytes long.  A hex digest will be 32
-characters long.  A base64 digest will be 22 characters long.
-
 =head1 FUNCTIONS
 
-The following functions can be exported from the C<Digest::MD5>
-module.  No functions are exported by default.
+The following functions are provided by the C<Digest::MD5> module.
+None of these functions are exported by default.
 
 =over 4
 
 =item md5($data,...)
 
 This function will concatenate all arguments, calculate the MD5 digest
-of this "message", and return it in binary form.
+of this "message", and return it in binary form.  The returned string
+will be 16 bytes long.
+
+The result of md5("a", "b", "c") will be exactly the same as the
+result of md5("abc").
 
 =item md5_hex($data,...)
 
-Same as md5(), but will return the digest in hexadecimal form.
+Same as md5(), but will return the digest in hexadecimal form. The
+length of the returned string will be 32 and it will only contain
+characters from this set: '0'..'9' and 'a'..'f'.
 
 =item md5_base64($data,...)
 
 Same as md5(), but will return the digest as a base64 encoded string.
-
-The base64 encoded string returned is not padded to be a multiple of 4
-bytes long.  If you want interoperability with other base64 encoded
-md5 digests you might want to append the string "==" to the result.
+The length of the returned string will be 22 and it will only contain
+characters from this set: 'A'..'Z', 'a'..'z', '0'..'9', '+' and
+'/'.
+
+Note that the base64 encoded string returned is not padded to be a
+multiple of 4 bytes long.  If you want interoperability with other
+base64 encoded md5 digests you might want to append the redundant
+string redundant "==" to the result.
 
 =back
 
 =head1 METHODS
 
-The following methods are available:
+The object oriented interface to C<Digest::MD5> is described in this
+section.  After a C<Digest::MD5> object has been created, you will add
+data to it and finally ask for the digest in a suitable format.  A
+single object can be used to calculate multiple digests.
+
+The following methods are provided:
 
 =over 4
 
 =item $md5 = Digest::MD5->new
 
 The constructor returns a new C<Digest::MD5> object which encapsulate
-the state of the MD5 message-digest algorithm.  You can add data to
-the object and finally ask for the digest.
+the state of the MD5 message-digest algorithm.
 
 If called as an instance method (i.e. $md5->new) it will just reset the
 state the object to the state of a newly created object.  No new
 object is created in this case.
 
-=item $md5->clone
-
-This is a copy constructor returning a clone of the $md5 object. It is
-useful when you do not want to destroy the digests state, but need an
-intermediate value of the digest, e.g. when calculating digests
-iteratively on a continuous data stream in order to obtain a copy which
-may be destroyed.
-
 =item $md5->reset
 
 This is just an alias for $md5->new.
 
+=item $md5->clone
+
+This a copy of the $md5 object. It is useful when you do not want to
+destroy the digests state, but need an intermediate value of the
+digest, e.g. when calculating digests iteratively on a continuous data
+stream.  Example:
+
+    my $md5 = Digest::MD5->new;
+    while (<>) {
+	$md5->add($_);
+	print "Line $.: ", $md5->clone->hexdigest, "\n";
+    }
+
 =item $md5->add($data,...)
 
 The $data provided as argument are appended to the message we
 calculate the digest for.  The return value is the $md5 object itself.
 
+All these lines will have the same effect on the state of the $md5
+object:
+
+    $md5->add("a"); $md5->add("b"); $md5->add("c");
+    $md5->add("a")->add("b")->add("c");
+    $md5->add("a", "b", "c");
+    $md5->add("abc");
+
 =item $md5->addfile($io_handle)
 
-The $io_handle is read until EOF and the content is appended to the
+The $io_handle will be read until EOF and its content appended to the
 message we calculate the digest for.  The return value is the $md5
 object itself.
 
-In most cases you want to make sure that the $io_handle is set up to
-be in binmode().
+The addfile() method will croak() if it fails reading data for some
+reason.  If it croaks it is unpredictable what the state of the $md5
+object will be in. The addfile() method might have been able to read
+the file partially before it failed.  It is probably wise to discard
+or reset the $md5 object if this occurs.
+
+In most cases you want to make sure that the $io_handle is in
+C<binmode> before you pass it as argument to the addfile() method.
 
 =item $md5->digest
 
-Return the binary digest for the message.
+Return the binary digest for the message.  The returned string will be
+16 bytes long.
 
 Note that the C<digest> operation is effectively a destructive,
 read-once operation. Once it has been performed, the C<Digest::MD5>
@@ -155,12 +186,17 @@
 
 =item $md5->hexdigest
 
-Same as $md5->digest, but will return the digest in hexadecimal form.
+Same as $md5->digest, but will return the digest in hexadecimal
+form. The length of the returned string will be 32 and it will only
+contain characters from this set: '0'..'9' and 'a'..'f'.
 
 =item $md5->b64digest
 
 Same as $md5->digest, but will return the digest as a base64 encoded
-string.
+string.  The length of the returned string will be 22 and it will only
+contain characters from this set: 'A'..'Z', 'a'..'z', '0'..'9', '+'
+and '/'.
+
 
 The base64 encoded string returned is not padded to be a multiple of 4
 bytes long.  If you want interoperability with other base64 encoded
@@ -177,12 +213,11 @@
     use Digest::MD5 qw(md5_hex);
     print "Digest is ", md5_hex("foobarbaz"), "\n";
 
-The above example would print out the message
+The above example would print out the message:
 
     Digest is 6df23dc03f9b54cc38a0fc1483df6e21
 
-provided that the implementation is working correctly.  The same
-checksum can also be calculated in OO style:
+The same checksum can also be calculated in OO style:
 
     use Digest::MD5;
     
@@ -266,9 +301,9 @@
  Copyright 1995-1996 Neil Winton.
  Copyright 1991-1992 RSA Data Security, Inc.
 
-The MD5 algorithm is defined in RFC 1321. The basic C code
-implementing the algorithm is derived from that in the RFC and is
-covered by the following copyright:
+The MD5 algorithm is defined in RFC 1321. This implementation is
+derived from the reference C code in RFC 1321 which is covered by
+the following copyright statement:
 
 =over 4
 
@@ -303,9 +338,9 @@
 
 =head1 AUTHORS
 
-The original MD5 interface was written by Neil Winton
+The original C<MD5> interface was written by Neil Winton
 (C<N.Winton at axion.bt.co.uk>).
 
-This release was made by Gisle Aas <gisle at ActiveState.com>
+The C<Digest::MD5> module is written by Gisle Aas <gisle at ActiveState.com>.
 
 =cut

Modified: trunk/orca/packages/Digest-MD5-2.26/MD5.xs
==============================================================================
--- trunk/orca/packages/Digest-MD5-2.24/MD5.xs	(original)
+++ trunk/orca/packages/Digest-MD5-2.26/MD5.xs	Tue Jul 22 11:34:45 2003
@@ -1,4 +1,4 @@
-/* $Id: MD5.xs,v 1.37 2003/03/09 15:20:43 gisle Exp $ */
+/* $Id: MD5.xs,v 1.40 2003/07/22 05:59:27 gisle Exp $ */
 
 /* 
  * This library is free software; you can redistribute it and/or
@@ -44,14 +44,17 @@
 }
 #endif
 
-#ifndef PATCHLEVEL
+#ifndef PERL_VERSION
 #    include <patchlevel.h>
 #    if !(defined(PERL_VERSION) || (SUBVERSION > 0 && defined(PATCHLEVEL)))
 #        include <could_not_find_Perl_patchlevel.h>
 #    endif
+#    define PERL_REVISION       5
+#    define PERL_VERSION        PATCHLEVEL
+#    define PERL_SUBVERSION     SUBVERSION
 #endif
 
-#if PATCHLEVEL <= 4 && !defined(PL_dowarn)
+#if PERL_VERSION <= 4 && !defined(PL_dowarn)
    #define PL_dowarn dowarn
 #endif
 
@@ -627,16 +630,23 @@
 	         * first.
 	         */
 	        STRLEN missing = 64 - fill;
-	        if ( (n = PerlIO_read(fh, buffer, missing)))
+	        if ( (n = PerlIO_read(fh, buffer, missing)) > 0)
 	 	    MD5Update(context, buffer, n);
 	        else
 		    XSRETURN(1);  /* self */
 	    }
 
-	    /* Process blocks until EOF */
-            while ( (n = PerlIO_read(fh, buffer, sizeof(buffer)))) {
+	    /* Process blocks until EOF or error */
+            while ( (n = PerlIO_read(fh, buffer, sizeof(buffer))) > 0) {
 	        MD5Update(context, buffer, n);
 	    }
+
+	    if (PerlIO_error(fh)) {
+		croak("Reading from filehandle failed");
+	    }
+	}
+	else {
+	    croak("No filehandle passed");
 	}
 	XSRETURN(1);  /* self */
 

Modified: trunk/orca/packages/Digest-MD5-2.26/Makefile.PL
==============================================================================
--- trunk/orca/packages/Digest-MD5-2.24/Makefile.PL	(original)
+++ trunk/orca/packages/Digest-MD5-2.26/Makefile.PL	Tue Jul 22 11:34:45 2003
@@ -23,7 +23,6 @@
     @extra,
     'dist'         => { COMPRESS => 'gzip -9f', SUFFIX => 'gz', },
 );
-exit;
 
 
 

Modified: trunk/orca/packages/Digest-MD5-2.26/t/badfile.t
==============================================================================
--- trunk/orca/packages/Digest-MD5-2.24/t/badfile.t	(original)
+++ trunk/orca/packages/Digest-MD5-2.26/t/badfile.t	Tue Jul 22 11:34:45 2003
@@ -1,6 +1,3 @@
-# Digest::MD5 2.07 and older used to trigger a core dump when
-# passed an illegal file handle that failed to open.
-
 print "1..2\n";
 
 use Digest::MD5 ();
@@ -11,11 +8,12 @@
    use vars qw(*FOO);
    $md5->addfile(*FOO);
 };
-print "not " unless $@ =~ /^Bad filehandle: FOO/;
+print "not " unless $@ =~ /^Bad filehandle: FOO at/;
 print "ok 1\n";
 
-open(BAR, "none-existing-file.$$");
-$md5->addfile(*BAR);
-
-print "not " unless $md5->hexdigest eq "d41d8cd98f00b204e9800998ecf8427e";
+open(BAR, "no-existing-file.$$");
+eval {
+    $md5->addfile(*BAR);
+};
+print "not " unless $@ =~ /^No filehandle passed at/;
 print "ok 2\n";

Modified: trunk/orca/packages/Digest-MD5-2.26/t/files.t
==============================================================================
--- trunk/orca/packages/Digest-MD5-2.24/t/files.t	(original)
+++ trunk/orca/packages/Digest-MD5-2.26/t/files.t	Tue Jul 22 11:34:45 2003
@@ -20,27 +20,27 @@
 my $EXPECT;
 if (ord "A" == 193) { # EBCDIC
     $EXPECT = <<EOT;
-4ee4091bda2bb74fb2416c2fdb0c4d4a  Changes
+4ae46ec4a90bbba96182d887e803c947  Changes
 0565ec21b15c0f23f4c51fb327c8926d  README
-b00637894d2bd395ffda2fa84adefdfd  MD5.pm
-20cd22cecca8f24e807a76b9c0d575e3  MD5.xs
+f834d9fb3944664af464815805f67403  MD5.pm
+45e5e6785b47fb922f33b4a74c29a148  MD5.xs
 276da0aa4e9a08b7fe09430c9c5690aa  rfc1321.txt
 EOT
 } elsif ("\n" eq "\015") { # MacOS
     $EXPECT = <<EOT;
-d7b1bf11283114d1b765f433a5d7b447  Changes
+dc0af6945b7f3977b8784e19a5b8a1da  Changes
 6c950a0211a5a28f023bb482037698cd  README
-f854bd4984ad0e73c483a49a28893c74  MD5.pm
-e3a430cf5604b80dd642de5bcc1a8221  MD5.xs
+b3a7b7f8f98cf78a14e8f7b3c375a4c2  MD5.pm
+ca3f8cb317c5d088ed9f97204c6b8cda  MD5.xs
 754b9db19f79dbc4992f7166eb0f37ce  rfc1321.txt
 EOT
 } else {
     # This is the output of: 'md5sum Changes README MD5.pm MD5.xs rfc1321.txt'
     $EXPECT = <<EOT;
-d7b1bf11283114d1b765f433a5d7b447  Changes
+042cef6cd9baf3d4606063dff06eee33  Changes
 6c950a0211a5a28f023bb482037698cd  README
-f854bd4984ad0e73c483a49a28893c74  MD5.pm
-e3a430cf5604b80dd642de5bcc1a8221  MD5.xs
+b3a7b7f8f98cf78a14e8f7b3c375a4c2  MD5.pm
+ca3f8cb317c5d088ed9f97204c6b8cda  MD5.xs
 754b9db19f79dbc4992f7166eb0f37ce  rfc1321.txt
 EOT
 }
@@ -88,7 +88,9 @@
 	 next;
      }
      if ($ENV{MAC_MD5SUM}) {
+         require Encode;
 	 my $data = cat_file($file);	
+	 Encode::from_to($data, 'latin1', 'MacRoman');
 	 print md5_hex($data), "  $base\n";
 	 next;
      }



More information about the Orca-checkins mailing list