]> granicus.if.org Git - python/commitdiff
[Patch #1171487, bug #1170331] Fix error in base64.b32decode when encoding a single...
authorAndrew M. Kuchling <amk@amk.ca>
Wed, 8 Jun 2005 22:51:38 +0000 (22:51 +0000)
committerAndrew M. Kuchling <amk@amk.ca>
Wed, 8 Jun 2005 22:51:38 +0000 (22:51 +0000)
Lib/base64.py
Lib/test/test_base64.py

index f90b91d994cfe9bd50d10ed7ccdef6711c64f015..8914acce92324a2df827e5d45288565b091d8f00 100755 (executable)
@@ -221,12 +221,14 @@ def b32decode(s, casefold=False, map01=None):
         acc += _b32rev[c] << shift
         shift -= 5
         if shift < 0:
-            parts.append(binascii.unhexlify(hex(acc)[2:-1]))
+            parts.append(binascii.unhexlify('%010x' % acc))
             acc = 0
             shift = 35
     # Process the last, partial quanta
-    last = binascii.unhexlify(hex(acc)[2:-1])
-    if padchars == 1:
+    last = binascii.unhexlify('%010x' % acc)
+    if padchars == 0:
+        last = ''                       # No characters
+    elif padchars == 1:
         last = last[:-1]
     elif padchars == 3:
         last = last[:-2]
@@ -234,7 +236,7 @@ def b32decode(s, casefold=False, map01=None):
         last = last[:-3]
     elif padchars == 6:
         last = last[:-4]
-    elif padchars <> 0:
+    else:
         raise TypeError('Incorrect padding')
     parts.append(last)
     return EMPTYSTRING.join(parts)
index a7fa2b98904b35449be574a6e9bdb38c7a5aee56..997a413362907a98fd3429d2c9ec03ace39958a8 100644 (file)
@@ -60,6 +60,7 @@ class BaseXYTestCase(unittest.TestCase):
         eq = self.assertEqual
         # Test default alphabet
         eq(base64.b64encode("www.python.org"), "d3d3LnB5dGhvbi5vcmc=")
+        eq(base64.b64encode('\x00'), 'AA==')
         eq(base64.b64encode("a"), "YQ==")
         eq(base64.b64encode("ab"), "YWI=")
         eq(base64.b64encode("abc"), "YWJj")
@@ -90,6 +91,7 @@ class BaseXYTestCase(unittest.TestCase):
     def test_b64decode(self):
         eq = self.assertEqual
         eq(base64.b64decode("d3d3LnB5dGhvbi5vcmc="), "www.python.org")
+        eq(base64.b64decode('AA=='), '\x00')
         eq(base64.b64decode("YQ=="), "a")
         eq(base64.b64decode("YWI="), "ab")
         eq(base64.b64decode("YWJj"), "abc")
@@ -123,6 +125,7 @@ class BaseXYTestCase(unittest.TestCase):
     def test_b32encode(self):
         eq = self.assertEqual
         eq(base64.b32encode(''), '')
+        eq(base64.b32encode('\x00'), 'AA======')
         eq(base64.b32encode('a'), 'ME======')
         eq(base64.b32encode('ab'), 'MFRA====')
         eq(base64.b32encode('abc'), 'MFRGG===')
@@ -132,6 +135,7 @@ class BaseXYTestCase(unittest.TestCase):
     def test_b32decode(self):
         eq = self.assertEqual
         eq(base64.b32decode(''), '')
+        eq(base64.b32decode('AA======'), '\x00')
         eq(base64.b32decode('ME======'), 'a')
         eq(base64.b32decode('MFRA===='), 'ab')
         eq(base64.b32decode('MFRGG==='), 'abc')
@@ -166,10 +170,12 @@ class BaseXYTestCase(unittest.TestCase):
     def test_b16encode(self):
         eq = self.assertEqual
         eq(base64.b16encode('\x01\x02\xab\xcd\xef'), '0102ABCDEF')
+        eq(base64.b16encode('\x00'), '00')
 
     def test_b16decode(self):
         eq = self.assertEqual
         eq(base64.b16decode('0102ABCDEF'), '\x01\x02\xab\xcd\xef')
+        eq(base64.b16decode('00'), '\x00')
         # Lower case is not allowed without a flag
         self.assertRaises(TypeError, base64.b16decode, '0102abcdef')
         # Case fold