]> granicus.if.org Git - python/commitdiff
Issue #2202: Fix UnboundLocalError in AbstractDigestAuthHandler.get_algorithm_impls
authorBerker Peksag <berker.peksag@gmail.com>
Sun, 6 Mar 2016 14:16:40 +0000 (16:16 +0200)
committerBerker Peksag <berker.peksag@gmail.com>
Sun, 6 Mar 2016 14:16:40 +0000 (16:16 +0200)
Raise ValueError if algorithm is not MD5 or SHA.

Initial patch by Mathieu Dupuy.

Lib/test/test_urllib2.py
Lib/urllib/request.py
Misc/NEWS

index a5281d864c01650626ea37319754c7114e74d4dd..008c751f9c6f16522e46fa2fb718028836dec606 100644 (file)
@@ -13,7 +13,8 @@ import urllib.request
 # proxy config data structure but is testable on all platforms.
 from urllib.request import (Request, OpenerDirector, HTTPBasicAuthHandler,
                             HTTPPasswordMgrWithPriorAuth, _parse_proxy,
-                            _proxy_bypass_macosx_sysconf)
+                            _proxy_bypass_macosx_sysconf,
+                            AbstractDigestAuthHandler)
 from urllib.parse import urlparse
 import urllib.error
 import http.client
@@ -1680,6 +1681,15 @@ class MiscTests(unittest.TestCase):
 
         self.assertRaises(ValueError, _parse_proxy, 'file:/ftp.example.com'),
 
+    def test_unsupported_algorithm(self):
+        handler = AbstractDigestAuthHandler()
+        with self.assertRaises(ValueError) as exc:
+            handler.get_algorithm_impls('invalid')
+        self.assertEqual(
+            str(exc.exception),
+            "Unsupported digest authentication algorithm 'invalid'"
+        )
+
 
 class RequestTests(unittest.TestCase):
     class PutRequest(Request):
index 4c1651861b364b8f0dc444db28aa9f5c9ad93d2d..fc8ef7f91b09fbb8ce59827ff6301c0153eef9d1 100644 (file)
@@ -1111,6 +1111,9 @@ class AbstractDigestAuthHandler:
         elif algorithm == 'SHA':
             H = lambda x: hashlib.sha1(x.encode("ascii")).hexdigest()
         # XXX MD5-sess
+        else:
+            raise ValueError("Unsupported digest authentication "
+                             "algorithm %r" % algorithm)
         KD = lambda s, d: H("%s:%s" % (s, d))
         return H, KD
 
index 8257b0f745d2f639003c14dd117d964f68cfd214..9a775ac527cd684d5e62d6bc5c63c9e515465fbd 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -91,6 +91,9 @@ Core and Builtins
 Library
 -------
 
+- Issue #2202: Fix UnboundLocalError in
+  AbstractDigestAuthHandler.get_algorithm_impls.  Initial patch by Mathieu Dupuy.
+
 - Issue #25718: Fixed pickling and copying the accumulate() iterator with
   total is None.