From 57b808d21a7651b303bf22264c4bc47824ab3b51 Mon Sep 17 00:00:00 2001
From: Barry Warsaw <barry@python.org>
Date: Tue, 15 Aug 2000 06:03:35 +0000
Subject: SHA_hexdigest(): A couple of small patches to this function, added
 after a brief conversation with TP.  First, the return values of the
 PyString_* function calls should be checked for errors.  Second,
 bit-manipulations should be used instead of division for spliting the byte up
 into its 4 bit digits.

---
 Modules/shamodule.c | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/Modules/shamodule.c b/Modules/shamodule.c
index 6f7a60d..3761cf5 100644
--- a/Modules/shamodule.c
+++ b/Modules/shamodule.c
@@ -422,14 +422,22 @@ SHA_hexdigest(SHAobject *self, PyObject *args)
 
     /* Create a new string */
     retval = PyString_FromStringAndSize(NULL, sizeof(digest) * 2);
+    if (!retval)
+	    return NULL;
     hex_digest = PyString_AsString(retval);
+    if (!hex_digest) {
+	    Py_DECREF(retval);
+	    return NULL;
+    }
 
     /* Make hex version of the digest */
     for(i=j=0; i<sizeof(digest); i++) {
         char c;
-        c = digest[i] / 16; c = (c>9) ? c+'a'-10 : c + '0';
+        c = (digest[i] >> 4) & 0xf;
+	c = (c>9) ? c+'a'-10 : c + '0';
         hex_digest[j++] = c;
-        c = digest[i] % 16; c = (c>9) ? c+'a'-10 : c + '0';
+        c = (digest[i] & 0xf);
+	c = (c>9) ? c+'a'-10 : c + '0';
         hex_digest[j++] = c;
     }
     return retval;
-- 
cgit v0.12

