mirror of https://github.com/python/cpython.git
Merged revisions 83145 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/branches/release27-maint ........ r83145 | gregory.p.smith | 2010-07-25 12:11:36 -0700 (Sun, 25 Jul 2010) | 3 lines Fixes issue #3704: cookielib was not properly handling URLs with a / in the parameters. ........
This commit is contained in:
parent
7c973454a9
commit
034ec78556
|
@ -607,19 +607,14 @@ def eff_request_host(request):
|
|||
return req_host, erhn
|
||||
|
||||
def request_path(request):
|
||||
"""request-URI, as defined by RFC 2965."""
|
||||
"""Path component of request-URI, as defined by RFC 2965."""
|
||||
url = request.get_full_url()
|
||||
#scheme, netloc, path, parameters, query, frag = urlparse.urlparse(url)
|
||||
#req_path = escape_path("".join(urlparse.urlparse(url)[2:]))
|
||||
path, parameters, query, frag = urlparse.urlparse(url)[2:]
|
||||
if parameters:
|
||||
path = "%s;%s" % (path, parameters)
|
||||
path = escape_path(path)
|
||||
req_path = urlparse.urlunparse(("", "", path, "", query, frag))
|
||||
if not req_path.startswith("/"):
|
||||
parts = urlparse.urlsplit(url)
|
||||
path = escape_path(parts.path)
|
||||
if not path.startswith("/"):
|
||||
# fix bad RFC 2396 absoluteURI
|
||||
req_path = "/"+req_path
|
||||
return req_path
|
||||
path = "/" + path
|
||||
return path
|
||||
|
||||
def request_port(request):
|
||||
host = request.get_host()
|
||||
|
|
|
@ -1,11 +1,16 @@
|
|||
# -*- coding: latin-1 -*-
|
||||
"""Tests for cookielib.py."""
|
||||
|
||||
import re, os, time
|
||||
import cookielib
|
||||
import os
|
||||
import re
|
||||
import time
|
||||
|
||||
from unittest import TestCase
|
||||
|
||||
from test import test_support
|
||||
|
||||
|
||||
class DateTimeTests(TestCase):
|
||||
|
||||
def test_time2isoz(self):
|
||||
|
@ -563,6 +568,16 @@ def test_default_path(self):
|
|||
interact_netscape(c, "http://www.acme.com/blah/rhubarb/", 'eggs="bar"')
|
||||
self.assert_("/blah/rhubarb" in c._cookies["www.acme.com"])
|
||||
|
||||
def test_default_path_with_query(self):
|
||||
cj = cookielib.CookieJar()
|
||||
uri = "http://example.com/?spam/eggs"
|
||||
value = 'eggs="bar"'
|
||||
interact_netscape(cj, uri, value)
|
||||
# default path does not include query, so is "/", not "/?spam"
|
||||
self.assert_("/" in cj._cookies["example.com"])
|
||||
# cookie is sent back to the same URI
|
||||
self.assertEquals(interact_netscape(cj, uri), value)
|
||||
|
||||
def test_escape_path(self):
|
||||
from cookielib import escape_path
|
||||
cases = [
|
||||
|
@ -591,15 +606,14 @@ def test_request_path(self):
|
|||
from urllib2 import Request
|
||||
from cookielib import request_path
|
||||
# with parameters
|
||||
req = Request("http://www.example.com/rheum/rhaponicum;"
|
||||
req = Request("http://www.example.com/rheum/rhaponticum;"
|
||||
"foo=bar;sing=song?apples=pears&spam=eggs#ni")
|
||||
self.assertEquals(request_path(req), "/rheum/rhaponicum;"
|
||||
"foo=bar;sing=song?apples=pears&spam=eggs#ni")
|
||||
self.assertEquals(request_path(req),
|
||||
"/rheum/rhaponticum;foo=bar;sing=song")
|
||||
# without parameters
|
||||
req = Request("http://www.example.com/rheum/rhaponicum?"
|
||||
req = Request("http://www.example.com/rheum/rhaponticum?"
|
||||
"apples=pears&spam=eggs#ni")
|
||||
self.assertEquals(request_path(req), "/rheum/rhaponicum?"
|
||||
"apples=pears&spam=eggs#ni")
|
||||
self.assertEquals(request_path(req), "/rheum/rhaponticum")
|
||||
# missing final slash
|
||||
req = Request("http://www.example.com")
|
||||
self.assertEquals(request_path(req), "/")
|
||||
|
|
|
@ -81,6 +81,9 @@ C-API
|
|||
Library
|
||||
-------
|
||||
|
||||
- Issue #3704: cookielib was not properly handling URLs with a / in the
|
||||
parameters.
|
||||
|
||||
- Issue #4629: getopt raises an error if an argument ends with = whereas getopt
|
||||
doesn't except a value (eg. --help= is rejected if getopt uses ['help='] long
|
||||
options).
|
||||
|
|
Loading…
Reference in New Issue