]> granicus.if.org Git - python/commitdiff
binascii_a2b_base64: Properly return an empty string if the input was all
authorThomas Wouters <thomas@python.org>
Mon, 17 Mar 2003 11:24:29 +0000 (11:24 +0000)
committerThomas Wouters <thomas@python.org>
Mon, 17 Mar 2003 11:24:29 +0000 (11:24 +0000)
    invalid, rather than returning a string of random garbage of the
    estimated result length. Closes SF patch #703471 by Hye-Shik Chang.

Will backport to 2.2-maint (consider it done.)

Lib/test/test_binascii.py
Modules/binascii.c

index f1f8b33f59d13edc5c4b20407333f42572d68a35..2764c3c5e52a75b0de436b4053fac54c73fcfde8 100755 (executable)
@@ -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
index c56d528ef47f28bbf20e530eb9bea4497c09d41a..05964c9351cc059e699558055b8574882cc17f8c 100644 (file)
@@ -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;
 }