@@ -649,14 +649,52 @@ def test_urlsplit_remove_unsafe_bytes(self):
649
649
self .assertEqual (p .scheme , "http" )
650
650
self .assertEqual (p .geturl (), "http://www.python.org/javascript:alert('msg')/?query=something#fragment" )
651
651
652
+ def test_urlsplit_strip_url (self ):
653
+ noise = bytes ([* range (0 , 0x1f ), 0x20 ])
654
+ base_url = "http://User:[email protected] :080/doc/?query=yes#frag"
655
+
656
+ url = noise .decode () + base_url + noise .decode ()
657
+ p = urllib .parse .urlsplit (url )
658
+ self .assertEqual (p .scheme , "http" )
659
+ self .
assertEqual (
p .
netloc ,
"User:[email protected] :080" )
660
+ self .assertEqual (p .path , "/doc/" )
661
+ self .assertEqual (p .query , "query=yes" )
662
+ self .assertEqual (p .fragment , "frag" )
663
+ self .assertEqual (p .username , "User" )
664
+ self .assertEqual (p .password , "Pass" )
665
+ self .assertEqual (p .hostname , "www.python.org" )
666
+ self .assertEqual (p .port , 80 )
667
+ self .assertEqual (p .geturl (), base_url )
668
+
669
+ url = noise + base_url .encode () + noise
670
+ p = urllib .parse .urlsplit (url )
671
+ self .assertEqual (p .scheme , b"http" )
672
+ self .
assertEqual (
p .
netloc ,
b"User:[email protected] :080" )
673
+ self .assertEqual (p .path , b"/doc/" )
674
+ self .assertEqual (p .query , b"query=yes" )
675
+ self .assertEqual (p .fragment , b"frag" )
676
+ self .assertEqual (p .username , b"User" )
677
+ self .assertEqual (p .password , b"Pass" )
678
+ self .assertEqual (p .hostname , b"www.python.org" )
679
+ self .assertEqual (p .port , 80 )
680
+ self .assertEqual (p .geturl (), base_url .encode ())
681
+
682
+ # with scheme as cache-key
683
+ url = "//www.python.org/"
684
+ scheme = noise .decode () + "https" + noise .decode ()
685
+ for _ in range (2 ):
686
+ p = urllib .parse .urlsplit (url , scheme = scheme )
687
+ self .assertEqual (p .scheme , "https" )
688
+ self .assertEqual (p .geturl (), "https://www.python.org/" )
689
+
652
690
def test_attributes_bad_port (self ):
653
691
"""Check handling of invalid ports."""
654
692
for bytes in (False , True ):
655
693
for parse in (urllib .parse .urlsplit , urllib .parse .urlparse ):
656
694
for port in ("foo" , "1.5" , "-1" , "0x10" , "-0" , "1_1" , " 1" , "1 " , "६" ):
657
695
with self .subTest (bytes = bytes , parse = parse , port = port ):
658
696
netloc = "www.example.net:" + port
659
- url = "http://" + netloc
697
+ url = "http://" + netloc + "/"
660
698
if bytes :
661
699
if netloc .isascii () and port .isascii ():
662
700
netloc = netloc .encode ("ascii" )
0 commit comments