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.
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 @@
"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 @@
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 @@
}
/* and set string size correctly */
- _PyString_Resize(&rv, bin_len);
+ if (bin_len > 0)
+ _PyString_Resize(&rv, bin_len);
return rv;
}