[Python-checkins] cpython (3.5): Issue #2202: Fix UnboundLocalError in

berker.peksag python-checkins at python.org
Sun Mar 6 09:17:40 EST 2016


https://hg.python.org/cpython/rev/22eab50cb585
changeset:   100430:22eab50cb585
branch:      3.5
parent:      100427:52d7a308e3b4
user:        Berker Peksag <berker.peksag at gmail.com>
date:        Sun Mar 06 16:16:40 2016 +0200
summary:
  Issue #2202: Fix UnboundLocalError in AbstractDigestAuthHandler.get_algorithm_impls

Raise ValueError if algorithm is not MD5 or SHA.

Initial patch by Mathieu Dupuy.

files:
  Lib/test/test_urllib2.py |  12 +++++++++++-
  Lib/urllib/request.py    |   3 +++
  Misc/NEWS                |   3 +++
  3 files changed, 17 insertions(+), 1 deletions(-)


diff --git a/Lib/test/test_urllib2.py b/Lib/test/test_urllib2.py
--- a/Lib/test/test_urllib2.py
+++ b/Lib/test/test_urllib2.py
@@ -13,7 +13,8 @@
 # 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 @@
 
         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):
diff --git a/Lib/urllib/request.py b/Lib/urllib/request.py
--- a/Lib/urllib/request.py
+++ b/Lib/urllib/request.py
@@ -1111,6 +1111,9 @@
         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
 
diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -91,6 +91,9 @@
 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.
 

-- 
Repository URL: https://hg.python.org/cpython


More information about the Python-checkins mailing list