@@ -499,16 +499,30 @@ def testIPv4toString(self):
499499 from socket import inet_aton as f , inet_pton , AF_INET
500500 g = lambda a : inet_pton (AF_INET , a )
501501
502+ assertInvalid = lambda func ,a : self .assertRaises (
503+ (socket .error , ValueError ), func , a
504+ )
505+
502506 self .assertEqual (b'\x00 \x00 \x00 \x00 ' , f ('0.0.0.0' ))
503507 self .assertEqual (b'\xff \x00 \xff \x00 ' , f ('255.0.255.0' ))
504508 self .assertEqual (b'\xaa \xaa \xaa \xaa ' , f ('170.170.170.170' ))
505509 self .assertEqual (b'\x01 \x02 \x03 \x04 ' , f ('1.2.3.4' ))
506510 self .assertEqual (b'\xff \xff \xff \xff ' , f ('255.255.255.255' ))
511+ assertInvalid (f , '0.0.0.' )
512+ assertInvalid (f , '300.0.0.0' )
513+ assertInvalid (f , 'a.0.0.0' )
514+ assertInvalid (f , '1.2.3.4.5' )
515+ assertInvalid (f , '::1' )
507516
508517 self .assertEqual (b'\x00 \x00 \x00 \x00 ' , g ('0.0.0.0' ))
509518 self .assertEqual (b'\xff \x00 \xff \x00 ' , g ('255.0.255.0' ))
510519 self .assertEqual (b'\xaa \xaa \xaa \xaa ' , g ('170.170.170.170' ))
511520 self .assertEqual (b'\xff \xff \xff \xff ' , g ('255.255.255.255' ))
521+ assertInvalid (g , '0.0.0.' )
522+ assertInvalid (g , '300.0.0.0' )
523+ assertInvalid (g , 'a.0.0.0' )
524+ assertInvalid (g , '1.2.3.4.5' )
525+ assertInvalid (g , '::1' )
512526
513527 def testIPv6toString (self ):
514528 if not hasattr (socket , 'inet_pton' ):
@@ -520,6 +534,9 @@ def testIPv6toString(self):
520534 except ImportError :
521535 return
522536 f = lambda a : inet_pton (AF_INET6 , a )
537+ assertInvalid = lambda a : self .assertRaises (
538+ (socket .error , ValueError ), f , a
539+ )
523540
524541 self .assertEqual (b'\x00 ' * 16 , f ('::' ))
525542 self .assertEqual (b'\x00 ' * 16 , f ('0::0' ))
@@ -528,21 +545,62 @@ def testIPv6toString(self):
528545 b'\x45 \xef \x76 \xcb \x00 \x1a \x56 \xef \xaf \xeb \x0b \xac \x19 \x24 \xae \xae ' ,
529546 f ('45ef:76cb:1a:56ef:afeb:bac:1924:aeae' )
530547 )
548+ self .assertEqual (
549+ b'\xad \x42 \x0a \xbc ' + b'\x00 ' * 4 + b'\x01 \x27 \x00 \x00 \x02 \x54 \x00 \x02 ' ,
550+ f ('ad42:abc::127:0:254:2' )
551+ )
552+ self .assertEqual (b'\x00 \x12 \x00 \x0a ' + b'\x00 ' * 12 , f ('12:a::' ))
553+ assertInvalid ('0x20::' )
554+ assertInvalid (':::' )
555+ assertInvalid ('::0::' )
556+ assertInvalid ('1::abc::' )
557+ assertInvalid ('1::abc::def' )
558+ assertInvalid ('1:2:3:4:5:6:' )
559+ assertInvalid ('1:2:3:4:5:6' )
560+ assertInvalid ('1:2:3:4:5:6:7:8:' )
561+ assertInvalid ('1:2:3:4:5:6:7:8:0' )
562+
563+ self .assertEqual (b'\x00 ' * 12 + b'\xfe \x2a \x17 \x40 ' ,
564+ f ('::254.42.23.64' )
565+ )
566+ self .assertEqual (
567+ b'\x00 \x42 ' + b'\x00 ' * 8 + b'\xa2 \x9b \xfe \x2a \x17 \x40 ' ,
568+ f ('42::a29b:254.42.23.64' )
569+ )
570+ self .assertEqual (
571+ b'\x00 \x42 \xa8 \xb9 \x00 \x00 \x00 \x02 \xff \xff \xa2 \x9b \xfe \x2a \x17 \x40 ' ,
572+ f ('42:a8b9:0:2:ffff:a29b:254.42.23.64' )
573+ )
574+ assertInvalid ('255.254.253.252' )
575+ assertInvalid ('1::260.2.3.0' )
576+ assertInvalid ('1::0.be.e.0' )
577+ assertInvalid ('1:2:3:4:5:6:7:1.2.3.4' )
578+ assertInvalid ('::1.2.3.4:0' )
579+ assertInvalid ('0.100.200.0:3:4:5:6:7:8' )
531580
532581 def testStringToIPv4 (self ):
533582 if not hasattr (socket , 'inet_ntop' ):
534583 return # No inet_ntop() on this platform
535584 from socket import inet_ntoa as f , inet_ntop , AF_INET
536585 g = lambda a : inet_ntop (AF_INET , a )
586+ assertInvalid = lambda func ,a : self .assertRaises (
587+ (socket .error , ValueError ), func , a
588+ )
537589
538590 self .assertEqual ('1.0.1.0' , f (b'\x01 \x00 \x01 \x00 ' ))
539591 self .assertEqual ('170.85.170.85' , f (b'\xaa \x55 \xaa \x55 ' ))
540592 self .assertEqual ('255.255.255.255' , f (b'\xff \xff \xff \xff ' ))
541593 self .assertEqual ('1.2.3.4' , f (b'\x01 \x02 \x03 \x04 ' ))
594+ assertInvalid (f , b'\x00 ' * 3 )
595+ assertInvalid (f , b'\x00 ' * 5 )
596+ assertInvalid (f , b'\x00 ' * 16 )
542597
543598 self .assertEqual ('1.0.1.0' , g (b'\x01 \x00 \x01 \x00 ' ))
544599 self .assertEqual ('170.85.170.85' , g (b'\xaa \x55 \xaa \x55 ' ))
545600 self .assertEqual ('255.255.255.255' , g (b'\xff \xff \xff \xff ' ))
601+ assertInvalid (g , b'\x00 ' * 3 )
602+ assertInvalid (g , b'\x00 ' * 5 )
603+ assertInvalid (g , b'\x00 ' * 16 )
546604
547605 def testStringToIPv6 (self ):
548606 if not hasattr (socket , 'inet_ntop' ):
@@ -554,6 +612,9 @@ def testStringToIPv6(self):
554612 except ImportError :
555613 return
556614 f = lambda a : inet_ntop (AF_INET6 , a )
615+ assertInvalid = lambda a : self .assertRaises (
616+ (socket .error , ValueError ), f , a
617+ )
557618
558619 self .assertEqual ('::' , f (b'\x00 ' * 16 ))
559620 self .assertEqual ('::1' , f (b'\x00 ' * 15 + b'\x01 ' ))
@@ -562,6 +623,10 @@ def testStringToIPv6(self):
562623 f (b'\x0a \xef \x0b \x01 \x05 \x06 \x10 \x01 \xff \xff \x99 \x97 \x00 \x55 \x01 \x70 ' )
563624 )
564625
626+ assertInvalid (b'\x12 ' * 15 )
627+ assertInvalid (b'\x12 ' * 17 )
628+ assertInvalid (b'\x12 ' * 4 )
629+
565630 # XXX The following don't test module-level functionality...
566631
567632 def testSockName (self ):
0 commit comments