diff --git a/Lib/test/test_binascii.py b/Lib/test/test_binascii.py index f1f8b33f59d..2764c3c5e52 100755 --- a/Lib/test/test_binascii.py +++ b/Lib/test/test_binascii.py @@ -69,6 +69,10 @@ for line in map(addnoise, lines): res = res + b verify(res == testdata) +# Test base64 with just invalid characters, which should return +# empty strings. TBD: shouldn't it raise an exception instead ? +verify(binascii.a2b_base64(fillers) == '') + # Test uu print "uu test" MAX_UU = 45 diff --git a/Modules/binascii.c b/Modules/binascii.c index c56d528ef47..05964c9351c 100644 --- a/Modules/binascii.c +++ b/Modules/binascii.c @@ -408,9 +408,16 @@ binascii_a2b_base64(PyObject *self, PyObject *args) return NULL; } - /* and set string size correctly */ + /* And set string size correctly. If the result string is empty + ** (because the input was all invalid) return the shared empty + ** string instead; _PyString_Resize() won't do this for us. + */ if (bin_len > 0) _PyString_Resize(&rv, bin_len); + else { + Py_DECREF(rv); + rv = PyString_FromString(""); + } return rv; }