homepage

This issue tracker has been migrated to GitHub , and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

Author demian.brecht
Recipients demian.brecht, martin.panter, orsenthil, soilandreyes
Date 2015年03月17日.00:46:41
SpamBayes Score -1.0
Marked as misclassified Yes
Message-id <C6114173-8BBA-42C4-897F-30839C22C7EF@gmail.com>
In-reply-to <1426543650.75.0.796896034366.issue22852@psf.upfronthosting.co.za>
Content
>>>> urlsplit("////evil.com").netloc
> ''
>>>> urlsplit("////evil.com").has_netloc
> True
>>>> urlunsplit(urlsplit("////evil.com")) # Adds "//" back
> '////evil.com'
RFC 3986, section 3.3:
 If a URI contains an authority component, then the path component
 must either be empty or begin with a slash ("/") character. If a URI
 does not contain an authority component, then the path cannot begin
 with two slash characters ("//").
Because this is a backwards incompatible behavioural change and is just as invalid as far as the RFC goes, I think that the current behaviour should be preserved. Even though it's still incorrect, it won't break existing code if left unchanged.
> ## _NetlocResultMixinBase abuse ##
> 
> The _NetlocResultMixinBase class is a common class used by the four result classes I’m interested in. I probably should rename it to something like _SplitParseMixinBase, since it is the common base to both urlsplit() and urlparse() results.
I think I'm coming around to this and realizing that it's actually quite close to my proposal, the major difference being the additional level of hierarchy in mine. My issue was mostly due to the addition of the variadic signature in the docs (i.e. line 407 here: http://bugs.python.org/review/22852/diff/14176/Doc/library/urllib.parse.rst) which led me to believe a nonsensical signature would be valid. After looking at it again, __new__ is still bound to the tuple's signature, so you still get the following:
>>> SplitResult('scheme','authority','path','query','fragment','foo','bar','baz')
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
 File "/Volumes/src/p/cpython/Lib/urllib/parse.py", line 137, in __new__
 self = super().__new__(type, *pos, **kw)
TypeError: __new__() takes 6 positional arguments but 9 were given
So I'm less opposed to this as-is. I would like to see the "*" removed from the docs though as it's misleading in the context of each of (Split|Parse)Result. I do agree that renaming _NetlocResultMixinBase would be helpful, but it might also be nice (from a pedant's point of view) to remove "mixin" altogether if the __new__ implementation stays as-is.
History
Date User Action Args
2015年03月17日 00:46:41demian.brechtsetrecipients: + demian.brecht, orsenthil, martin.panter, soilandreyes
2015年03月17日 00:46:41demian.brechtlinkissue22852 messages
2015年03月17日 00:46:41demian.brechtcreate

AltStyle によって変換されたページ (->オリジナル) /