File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 7676
7777Non-absolute URI
7878http:/foo
79- fail
79+ fail
80+
81+ Illegal character in URI
82+ http://<illegal>.com/
83+ fail
84+
85+ Non-ascii character in URI
86+ http://foo.com/
87+ fail
Original file line number Diff line number Diff line change 44uri_pattern = r'^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?'
55uri_re = re .compile (uri_pattern )
66
7+ # gen-delims = ":" / "/" / "?" / "#" / "[" / "]" / "@"
8+ #
9+ # sub-delims = "!" / "$" / "&" / "'" / "(" / ")"
10+ # / "*" / "+" / "," / ";" / "="
11+ #
12+ # unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
13+
14+ uri_illegal_char_re = re .compile (
15+ "[^-A-Za-z0-9:/?#[\]@!$&'()*+,;=._~%]" , re .UNICODE )
716
817authority_pattern = r'^([^@]*@)?([^:]*)(:.*)?'
918authority_re = re .compile (authority_pattern )
@@ -131,6 +140,11 @@ def urinorm(uri):
131140 if isinstance (uri , unicode ):
132141 uri = _escapeme_re .sub (_pct_escape_unicode , uri ).encode ('ascii' )
133142
143+ illegal_mo = uri_illegal_char_re .search (uri )
144+ if illegal_mo :
145+ raise ValueError ('Illegal characters in URI: %r at position %s' %
146+ (illegal_mo .group (), illegal_mo .start ()))
147+
134148 uri_mo = uri_re .match (uri )
135149
136150 scheme = uri_mo .group (2 )
You can’t perform that action at this time.
0 commit comments