This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Revise check for negative versions plus test
authorJohn Peacock <jpeacock@cpan.org>
Sat, 2 Jul 2011 03:18:09 +0000 (23:18 -0400)
committerFather Chrysostomos <sprout@cpan.org>
Sat, 2 Jul 2011 04:59:24 +0000 (21:59 -0700)
lib/version.pm
lib/version.t
util.c

index adeaacd..1126f91 100644 (file)
@@ -6,7 +6,7 @@ use strict;
 
 use vars qw(@ISA $VERSION $CLASS $STRICT $LAX *declare *qv);
 
-$VERSION = 0.88;
+$VERSION = 0.92;
 
 $CLASS = 'version';
 
index d2e3a2b..bee9078 100644 (file)
@@ -213,6 +213,10 @@ sub BaseTests {
     like($@, qr/non-numeric data/,
        "Invalid version format (non-numeric data)");
 
+    eval { $version = $CLASS->$method("-1.23")};
+    like($@, qr/negative version number/,
+       "Invalid version format (negative version number)");
+
     # from here on out capture the warning and test independently
     {
     eval{$version = $CLASS->$method("99 and 44/100 pure")};
diff --git a/util.c b/util.c
index fcfeda9..e22a97f 100644 (file)
--- a/util.c
+++ b/util.c
@@ -4541,6 +4541,11 @@ dotted_decimal_version:
            }
        }
 
+       /* and we never support negative versions */
+       if ( *d == '-') {
+               BADVERSION(s,errstr,"Invalid version format (negative version number)");                
+       }
+
        /* consume all of the integer part */
        while (isDIGIT(*d))
            d++;
@@ -4559,9 +4564,6 @@ dotted_decimal_version:
            /* found just an integer */
            goto version_prescan_finish;
        }
-       else if ( *d == '-') {
-               BADVERSION(s,errstr,"Invalid version format (negative version number)");                
-       }
        else if ( d == s ) {
            /* didn't find either integer or period */
            BADVERSION(s,errstr,"Invalid version format (non-numeric data)");