@@ -895,16 +895,30 @@ def testIPv4toString(self):
895895 from socket import inet_aton as f , inet_pton , AF_INET
896896 g = lambda a : inet_pton (AF_INET , a )
897897
898+ assertInvalid = lambda func ,a : self .assertRaises (
899+ (socket .error , ValueError ), func , a
900+ )
901+
898902 self .assertEqual (b'\x00 \x00 \x00 \x00 ' , f ('0.0.0.0' ))
899903 self .assertEqual (b'\xff \x00 \xff \x00 ' , f ('255.0.255.0' ))
900904 self .assertEqual (b'\xaa \xaa \xaa \xaa ' , f ('170.170.170.170' ))
901905 self .assertEqual (b'\x01 \x02 \x03 \x04 ' , f ('1.2.3.4' ))
902906 self .assertEqual (b'\xff \xff \xff \xff ' , f ('255.255.255.255' ))
907+ assertInvalid (f , '0.0.0.' )
908+ assertInvalid (f , '300.0.0.0' )
909+ assertInvalid (f , 'a.0.0.0' )
910+ assertInvalid (f , '1.2.3.4.5' )
911+ assertInvalid (f , '::1' )
903912
904913 self .assertEqual (b'\x00 \x00 \x00 \x00 ' , g ('0.0.0.0' ))
905914 self .assertEqual (b'\xff \x00 \xff \x00 ' , g ('255.0.255.0' ))
906915 self .assertEqual (b'\xaa \xaa \xaa \xaa ' , g ('170.170.170.170' ))
907916 self .assertEqual (b'\xff \xff \xff \xff ' , g ('255.255.255.255' ))
917+ assertInvalid (g , '0.0.0.' )
918+ assertInvalid (g , '300.0.0.0' )
919+ assertInvalid (g , 'a.0.0.0' )
920+ assertInvalid (g , '1.2.3.4.5' )
921+ assertInvalid (g , '::1' )
908922
909923 def testIPv6toString (self ):
910924 if not hasattr (socket , 'inet_pton' ):
@@ -916,6 +930,9 @@ def testIPv6toString(self):
916930 except ImportError :
917931 return
918932 f = lambda a : inet_pton (AF_INET6 , a )
933+ assertInvalid = lambda a : self .assertRaises (
934+ (socket .error , ValueError ), f , a
935+ )
919936
920937 self .assertEqual (b'\x00 ' * 16 , f ('::' ))
921938 self .assertEqual (b'\x00 ' * 16 , f ('0::0' ))
@@ -924,21 +941,62 @@ def testIPv6toString(self):
924941 b'\x45 \xef \x76 \xcb \x00 \x1a \x56 \xef \xaf \xeb \x0b \xac \x19 \x24 \xae \xae ' ,
925942 f ('45ef:76cb:1a:56ef:afeb:bac:1924:aeae' )
926943 )
944+ self .assertEqual (
945+ b'\xad \x42 \x0a \xbc ' + b'\x00 ' * 4 + b'\x01 \x27 \x00 \x00 \x02 \x54 \x00 \x02 ' ,
946+ f ('ad42:abc::127:0:254:2' )
947+ )
948+ self .assertEqual (b'\x00 \x12 \x00 \x0a ' + b'\x00 ' * 12 , f ('12:a::' ))
949+ assertInvalid ('0x20::' )
950+ assertInvalid (':::' )
951+ assertInvalid ('::0::' )
952+ assertInvalid ('1::abc::' )
953+ assertInvalid ('1::abc::def' )
954+ assertInvalid ('1:2:3:4:5:6:' )
955+ assertInvalid ('1:2:3:4:5:6' )
956+ assertInvalid ('1:2:3:4:5:6:7:8:' )
957+ assertInvalid ('1:2:3:4:5:6:7:8:0' )
958+
959+ self .assertEqual (b'\x00 ' * 12 + b'\xfe \x2a \x17 \x40 ' ,
960+ f ('::254.42.23.64' )
961+ )
962+ self .assertEqual (
963+ b'\x00 \x42 ' + b'\x00 ' * 8 + b'\xa2 \x9b \xfe \x2a \x17 \x40 ' ,
964+ f ('42::a29b:254.42.23.64' )
965+ )
966+ self .assertEqual (
967+ b'\x00 \x42 \xa8 \xb9 \x00 \x00 \x00 \x02 \xff \xff \xa2 \x9b \xfe \x2a \x17 \x40 ' ,
968+ f ('42:a8b9:0:2:ffff:a29b:254.42.23.64' )
969+ )
970+ assertInvalid ('255.254.253.252' )
971+ assertInvalid ('1::260.2.3.0' )
972+ assertInvalid ('1::0.be.e.0' )
973+ assertInvalid ('1:2:3:4:5:6:7:1.2.3.4' )
974+ assertInvalid ('::1.2.3.4:0' )
975+ assertInvalid ('0.100.200.0:3:4:5:6:7:8' )
927976
928977 def testStringToIPv4 (self ):
929978 if not hasattr (socket , 'inet_ntop' ):
930979 return # No inet_ntop() on this platform
931980 from socket import inet_ntoa as f , inet_ntop , AF_INET
932981 g = lambda a : inet_ntop (AF_INET , a )
982+ assertInvalid = lambda func ,a : self .assertRaises (
983+ (socket .error , ValueError ), func , a
984+ )
933985
934986 self .assertEqual ('1.0.1.0' , f (b'\x01 \x00 \x01 \x00 ' ))
935987 self .assertEqual ('170.85.170.85' , f (b'\xaa \x55 \xaa \x55 ' ))
936988 self .assertEqual ('255.255.255.255' , f (b'\xff \xff \xff \xff ' ))
937989 self .assertEqual ('1.2.3.4' , f (b'\x01 \x02 \x03 \x04 ' ))
990+ assertInvalid (f , b'\x00 ' * 3 )
991+ assertInvalid (f , b'\x00 ' * 5 )
992+ assertInvalid (f , b'\x00 ' * 16 )
938993
939994 self .assertEqual ('1.0.1.0' , g (b'\x01 \x00 \x01 \x00 ' ))
940995 self .assertEqual ('170.85.170.85' , g (b'\xaa \x55 \xaa \x55 ' ))
941996 self .assertEqual ('255.255.255.255' , g (b'\xff \xff \xff \xff ' ))
997+ assertInvalid (g , b'\x00 ' * 3 )
998+ assertInvalid (g , b'\x00 ' * 5 )
999+ assertInvalid (g , b'\x00 ' * 16 )
9421000
9431001 def testStringToIPv6 (self ):
9441002 if not hasattr (socket , 'inet_ntop' ):
@@ -950,6 +1008,9 @@ def testStringToIPv6(self):
9501008 except ImportError :
9511009 return
9521010 f = lambda a : inet_ntop (AF_INET6 , a )
1011+ assertInvalid = lambda a : self .assertRaises (
1012+ (socket .error , ValueError ), f , a
1013+ )
9531014
9541015 self .assertEqual ('::' , f (b'\x00 ' * 16 ))
9551016 self .assertEqual ('::1' , f (b'\x00 ' * 15 + b'\x01 ' ))
@@ -958,6 +1019,10 @@ def testStringToIPv6(self):
9581019 f (b'\x0a \xef \x0b \x01 \x05 \x06 \x10 \x01 \xff \xff \x99 \x97 \x00 \x55 \x01 \x70 ' )
9591020 )
9601021
1022+ assertInvalid (b'\x12 ' * 15 )
1023+ assertInvalid (b'\x12 ' * 17 )
1024+ assertInvalid (b'\x12 ' * 4 )
1025+
9611026 # XXX The following don't test module-level functionality...
9621027
9631028 def testSockName (self ):
0 commit comments