> > Looks like a but in NetAddr::IP 4.034, it forgets to adjust the CIDR > > mask when converting an IPv4 address to an IPv6 notation:
s/but/BUG/ :) > > correct (NetAddr-IP-4.033): > > $ perl -le 'use NetAddr::IP; print NetAddr::IP->new6("127.0.0.0/8")' > > 0:0:0:0:0:0:7F00:0/104 > > > > wrong (NetAddr-IP-4.034): > > $ perl -le 'use NetAddr::IP; print NetAddr::IP->new6("127.0.0.0/8")' > > 0:0:0:0:0:0:7F00:0/8 > Mmmh. > In fact it seems they bobbed few lines from 4.033... The offending change is: --- NetAddr-IP-4.033/Lite/Lite.pm 2010-09-29 19:35:16.000000000 +0200 +++ NetAddr-IP-4.034/Lite/Lite.pm 2010-10-26 01:20:12.000000000 +0200 @@ -696,3 +696,3 @@ if ($mask =~ /^(\d+)$/) { - if (index($ip,':') < 0) { # is ipV4 + if (! $isV6 && index($ip,':') < 0) { # is ipV4 if ($1 == 32) { # cidr 32 (which is in fact the only functional change in 4.034) > You sure new6 may be used with IPv4 address, huh? Yes. According to docs: Methods "->new([$addr, [ $mask|IPv6 ]])" "->new6([$addr, [ $mask]])" "->new_no([$addr, [ $mask]])" "->new_from_aton($netaddr)" The first two methods create a new address with the supplied address in $addr and an optional netmask $mask [...] "->new6" marks the address as being in ipV6 address space even if the format would suggest otherwise. i.e. ->new6('1.2.3.4') will result in ::102:304 addresses submitted to ->new in ipV6 notation will remain in that notation permanently. i.e. ->new('::1.2.3.4') will result in ::102:304 whereas new('1.2.3.4') would print out as 1.2.3.4 $addr can be almost anything that can be resolved to an IP address in all the notations I have seen over time. It can optionally contain the mask in CIDR notation. > If you confirm this, I can take care of reporting the bug to upstream. Please do so, thanks! Mark