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.
/* 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;