summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBarry Warsaw <barry@python.org>2002-08-15 22:14:24 (GMT)
committerBarry Warsaw <barry@python.org>2002-08-15 22:14:24 (GMT)
commit0a51b58e6b5ffd3cc17722f4ae19893ed486f3c9 (patch)
tree8779c759e1dfd74bd7e3d02042d12294099ba604
parent7ca993ed37f84491885cc2d96ae7d1a575a7a2f4 (diff)
downloadcpython-0a51b58e6b5ffd3cc17722f4ae19893ed486f3c9.zip
cpython-0a51b58e6b5ffd3cc17722f4ae19893ed486f3c9.tar.gz
cpython-0a51b58e6b5ffd3cc17722f4ae19893ed486f3c9.tar.bz2
base64.decodestring('') should return '' instead of raising an
exception. The bug fix for SF #430849 wasn't quite right. This closes SF bug #595671. I'll backport this to Python 2.2.
-rw-r--r--Lib/test/test_base64.py7
-rw-r--r--Modules/binascii.c7
2 files changed, 3 insertions, 11 deletions
diff --git a/Lib/test/test_base64.py b/Lib/test/test_base64.py
index 223c388..42e3c81 100644
--- a/Lib/test/test_base64.py
+++ b/Lib/test/test_base64.py
@@ -44,12 +44,7 @@ class Base64TestCase(unittest.TestCase):
"YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWjAxMjM0\nNTY3ODkhQCMwXiYqKCk7Ojw+LC4gW117fQ==\n") ==
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#0^&*();:<>,. []{}",
reason = "long decodestring failed")
- try:
- base64.decodestring("")
- except binascii_error:
- pass
- else:
- self.fail("expected a binascii.Error on null decode request")
+ test_support.verify(base64.decodestring('') == '')
def test_main():
test_support.run_unittest(Base64TestCase)
diff --git a/Modules/binascii.c b/Modules/binascii.c
index 0fe85fc..c56d528 100644
--- a/Modules/binascii.c
+++ b/Modules/binascii.c
@@ -346,10 +346,6 @@ binascii_a2b_base64(PyObject *self, PyObject *args)
if ( !PyArg_ParseTuple(args, "t#:a2b_base64", &ascii_data, &ascii_len) )
return NULL;
- if ( ascii_len == 0) {
- PyErr_SetString(Error, "Cannot decode empty input");
- return NULL;
- }
bin_len = ((ascii_len+3)/4)*3; /* Upper bound, corrected later */
/* Allocate the buffer */
@@ -413,7 +409,8 @@ binascii_a2b_base64(PyObject *self, PyObject *args)
}
/* and set string size correctly */
- _PyString_Resize(&rv, bin_len);
+ if (bin_len > 0)
+ _PyString_Resize(&rv, bin_len);
return rv;
}