]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
[2.7] bpo-36742: Fix urlparse.urlsplit() error message for Unicode URL (GH-13937)
authorVictor Stinner <vstinner@redhat.com>
Tue, 11 Jun 2019 10:45:35 +0000 (12:45 +0200)
committerGitHub <noreply@github.com>
Tue, 11 Jun 2019 10:45:35 +0000 (12:45 +0200)
If urlparse.urlsplit() detects an invalid netloc according to NFKC
normalization, the error message type is now str rather than unicode,
and use repr() to format the URL, to prevent <exception str() failed>
when display the error message.

Lib/test/test_urlparse.py
Lib/urlparse.py
Misc/NEWS.d/next/Library/2019-06-10-12-02-45.bpo-36742.UEdHXJ.rst [new file with mode: 0644]

index 857ed96d92fe2dec2656a80c9ed252e4967b92af..86c4a0595c4f6bb8fd66764609c39fb86fcff76d 100644 (file)
@@ -656,6 +656,15 @@ class UrlParseTestCase(unittest.TestCase):
                     with self.assertRaises(ValueError):
                         urlparse.urlsplit(url)
 
+        # check error message: invalid netloc must be formated with repr()
+        # to get an ASCII error message
+        with self.assertRaises(ValueError) as cm:
+            urlparse.urlsplit(u'http://example.com\uFF03@bing.com')
+        self.assertEqual(str(cm.exception),
+                         "netloc u'example.com\\uff03@bing.com' contains invalid characters "
+                         "under NFKC normalization")
+        self.assertIsInstance(cm.exception.args[0], str)
+
 def test_main():
     test_support.run_unittest(UrlParseTestCase)
 
index 6834f3c1798b093364d679777bc3bf5f491c673f..798b467b605f73a2c3ab394412953e8a7e5b1dc4 100644 (file)
@@ -180,8 +180,9 @@ def _checknetloc(netloc):
         return
     for c in '/?#@:':
         if c in netloc2:
-            raise ValueError(u"netloc '" + netloc + u"' contains invalid " +
-                             u"characters under NFKC normalization")
+            raise ValueError("netloc %r contains invalid characters "
+                             "under NFKC normalization"
+                             % netloc)
 
 def urlsplit(url, scheme='', allow_fragments=True):
     """Parse a URL into 5 components:
diff --git a/Misc/NEWS.d/next/Library/2019-06-10-12-02-45.bpo-36742.UEdHXJ.rst b/Misc/NEWS.d/next/Library/2019-06-10-12-02-45.bpo-36742.UEdHXJ.rst
new file mode 100644 (file)
index 0000000..3ba7740
--- /dev/null
@@ -0,0 +1,3 @@
+:func:`urlparse.urlsplit` error message for invalid ``netloc`` according to
+NFKC normalization is now a :class:`str` string, rather than a
+:class:`unicode` string, to prevent error when displaying the error.