From 8a074aeea92f815f915be616d56ae962ff541782 Mon Sep 17 00:00:00 2001 From: Bastian Kleineidam Date: Tue, 31 Aug 2010 09:16:24 +0200 Subject: [PATCH] Work around Python 2.6+ urljoin bug. --- doc/changelog.txt | 3 +++ linkcheck/checker/urlbase.py | 4 ++++ tests/test_urlbuild.py | 8 ++++++++ 3 files changed, 15 insertions(+) diff --git a/doc/changelog.txt b/doc/changelog.txt index 47610deb..ed330132 100644 --- a/doc/changelog.txt +++ b/doc/changelog.txt @@ -9,6 +9,9 @@ Fixes: Closes: SF bug #3035754 - file: Prevent truncation of UNC paths on Windows systems. Closes: SF bug #3017391 +- url: Work around a Python bug cutting off characters when joining an + URL that starts with semicolon. + Closes: SF bug #3056136 Changes: - checking: Caches are now size-restricted to limit the memory diff --git a/linkcheck/checker/urlbase.py b/linkcheck/checker/urlbase.py index 0508e3b1..e5e7ceed 100644 --- a/linkcheck/checker/urlbase.py +++ b/linkcheck/checker/urlbase.py @@ -52,6 +52,10 @@ def urljoin (parent, url, scheme): """ if url.startswith(scheme+":"): return url + # work around a Python 2.6/3.1 bug cutting off characters when the URL + # begins with semicolon + if url.startswith(';'): + url = "./%s" % url return urlparse.urljoin(parent, url) diff --git a/tests/test_urlbuild.py b/tests/test_urlbuild.py index 232a4054..72a405c3 100644 --- a/tests/test_urlbuild.py +++ b/tests/test_urlbuild.py @@ -22,6 +22,7 @@ import unittest import linkcheck.configuration import linkcheck.director import linkcheck.checker.httpurl +import linkcheck.checker.urlbase def get_test_aggregate (): @@ -47,3 +48,10 @@ class TestUrlBuild (unittest.TestCase): aggregate, parent_url=parent_url) o.build_url() self.assertEqual(o.url, 'http://') + + def test_urljoin (self): + parent_url = "http://localhost:8001/test" + base_url = ";param=value" + scheme = 'http' + res = linkcheck.checker.urlbase.urljoin(parent_url, base_url, scheme) + self.assertEqual(res, 'http://localhost:8001/;param=value')