]> granicus.if.org Git - python/commitdiff
Make sure hexdigest() returns str, not str8.
authorGuido van Rossum <guido@python.org>
Tue, 10 Jul 2007 13:20:29 +0000 (13:20 +0000)
committerGuido van Rossum <guido@python.org>
Tue, 10 Jul 2007 13:20:29 +0000 (13:20 +0000)
Modules/_hashopenssl.c

index 47fc674ce3de1a1060873e2af37873d848108c6c..dba1aa6d9098b257f77a765278832f2e97493d17 100644 (file)
@@ -127,17 +127,10 @@ EVP_hexdigest(EVPobject *self, PyObject *unused)
 
     EVP_MD_CTX_cleanup(&temp_ctx);
 
-    /* Create a new string */
-    /* NOTE: not thread safe! modifying an already created string object */
-    /* (not a problem because we hold the GIL by default) */
-    retval = PyString_FromStringAndSize(NULL, digest_size * 2);
-    if (!retval)
-           return NULL;
-    hex_digest = PyString_AS_STRING(retval);
-    if (!hex_digest) {
-           Py_DECREF(retval);
-           return NULL;
-    }
+    /* Allocate a new buffer */
+    hex_digest = PyMem_Malloc(digest_size * 2 + 1);
+    if (!hex_digest)
+       return PyErr_NoMemory();
 
     /* Make hex version of the digest */
     for(i=j=0; i<digest_size; i++) {
@@ -149,6 +142,8 @@ EVP_hexdigest(EVPobject *self, PyObject *unused)
        c = (c>9) ? c+'a'-10 : c + '0';
         hex_digest[j++] = c;
     }
+    retval = PyUnicode_FromStringAndSize(hex_digest, digest_size * 2);
+    PyMem_Free(hex_digest);
     return retval;
 }