Amazingly, this bug still hasn't been fixed. Or even commented upon by
the maintainer (who has anyway uploaded new upstream versions which
don't fix the bug in the meantime).
Here's a slightly ugly patch which I think is correct. I'm using this
now.
--- CIDR.pm 2012-02-15 13:32:45.000000000 +0000
+++ /tmp/mdw/perl5/Net/CIDR.pm 2013-07-07 12:23:22.000000000 +0100
@@ -791,6 +792,7 @@
sub _ipcmp {
my $aa=shift;
my $bb=shift;
+ my $mismatch = shift;
my $isipv6_1;
my $isipv6_2;
@@ -798,10 +800,10 @@
($isipv6_1, $aa)=_ipv6to4($aa);
($isipv6_2, $bb)=_ipv6to4($bb);
- if ($isipv6_1 || $isipv6_2)
+ if (!$isipv6_1 != !$isipv6_2)
{
- croak "Invalid netblock: $aa-$bb"
- unless $isipv6_1 && $isipv6_2;
+ return $mismatch if defined $mismatch;
+ croak "Invalid netblock: $aa-$bb";
}
my @a=split (/\./, $aa);
@@ -1177,8 +1179,8 @@
for ($i=0; $i <= $#a; $i++)
{
- next if _ipcmp($b[$i], $lo) < 0;
- next if _ipcmp($hi, $a[$i]) < 0;
+ next if _ipcmp($b[$i], $lo, -1) < 0;
+ next if _ipcmp($hi, $a[$i], -1) < 0;
return 1;
}
-- [mdw]
--
To UNSUBSCRIBE, email to [email protected]
with a subject of "unsubscribe". Trouble? Contact [email protected]