]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
Fix query string escaping in engine URLs (Fixes #5341) 5342/head
authorMiguel Grinberg <miguel.grinberg@gmail.com>
Wed, 20 May 2020 23:13:38 +0000 (00:13 +0100)
committerMiguel Grinberg <miguel.grinberg@gmail.com>
Thu, 21 May 2020 09:48:13 +0000 (10:48 +0100)
lib/sqlalchemy/engine/url.py
test/engine/test_parseconnect.py

index 5950fa0217257be7dc3f1beaa78c08f7db2f0224..7b7a0047ce18089bb17ef2dc868864c02c442474 100644 (file)
@@ -96,7 +96,7 @@ class URL(object):
             keys = list(self.query)
             keys.sort()
             s += "?" + "&".join(
-                "%s=%s" % (k, element)
+                "%s=%s" % (util.quote_plus(k), util.quote_plus(element))
                 for k in keys
                 for element in util.to_list(self.query[k])
             )
index 1277425c150f44985ba5d1bfaed37500bc3fc7b4..77b882f2c19696fbb00c77406a5476604704b1fa 100644 (file)
@@ -147,6 +147,11 @@ class URLTest(fixtures.TestBase):
             "dialect://user:pass@host/db?arg1=param1&arg2=param2&arg2=param3",
         )
 
+        test_url = "dialect://user:pass@host/db?arg1%3D=param1&arg2=param+2"
+        u = url.make_url(test_url)
+        eq_(u.query, {"arg1=": "param1", "arg2": "param 2"})
+        eq_(str(u), test_url)
+
     def test_comparison(self):
         components = (
             "drivername",