]> granicus.if.org Git - python/commitdiff
Issue #17812: Fixed quadratic complexity of base64.b32encode().
authorSerhiy Storchaka <storchaka@gmail.com>
Sun, 19 May 2013 08:41:15 +0000 (11:41 +0300)
committerSerhiy Storchaka <storchaka@gmail.com>
Sun, 19 May 2013 08:41:15 +0000 (11:41 +0300)
Lib/base64.py
Misc/NEWS

index 4042f004fd9d03e7a87be5a9d003d790efb21631..6bcdff63d4a5bed6bec8835bf35ce33d68b4ec6c 100755 (executable)
@@ -166,7 +166,7 @@ def b32encode(s):
     if leftover:
         s = s + bytes(5 - leftover)  # Don't use += !
         quanta += 1
-    encoded = bytes()
+    encoded = bytearray()
     for i in range(quanta):
         # c1 and c2 are 16 bits wide, c3 is 8 bits wide.  The intent of this
         # code is to process the 40 bits in units of 5 bits.  So we take the 1
@@ -187,14 +187,14 @@ def b32encode(s):
                           ])
     # Adjust for any leftover partial quanta
     if leftover == 1:
-        return encoded[:-6] + b'======'
+        encoded[-6:] = b'======'
     elif leftover == 2:
-        return encoded[:-4] + b'===='
+        encoded[-4:] = b'===='
     elif leftover == 3:
-        return encoded[:-3] + b'==='
+        encoded[-3:] = b'==='
     elif leftover == 4:
-        return encoded[:-1] + b'='
-    return encoded
+        encoded[-1:] = b'='
+    return bytes(encoded)
 
 
 def b32decode(s, casefold=False, map01=None):
index 1a516b77396067ab7a324ab6a3dc79e324f40b90..a7435f663ab1a11c1ec1e4ac148c96b8385ed831 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -24,6 +24,8 @@ Core and Builtins
 Library
 -------
 
+- Issue #17812: Fixed quadratic complexity of base64.b32encode().
+
 - Issue #17980: Fix possible abuse of ssl.match_hostname() for denial of
   service using certificates with many wildcards (CVE-2013-2099).