Index: Modules/md5module.c =================================================================== --- Modules/md5module.c (revision 70085) +++ Modules/md5module.c (working copy) @@ -272,19 +272,20 @@ if (!PyArg_ParseTuple(args, "|O:new", &data_obj)) return NULL; - GET_BUFFER_VIEW_OR_ERROUT(data_obj, &view, NULL); + if (data_obj) + GET_BUFFER_VIEW_OR_ERROUT(data_obj, &view, NULL); if ((md5p = newmd5object()) == NULL) { - PyBuffer_Release(&view); + if (data_obj) + PyBuffer_Release(&view); return NULL; } if (data_obj) { md5_append(&md5p->md5, (unsigned char*)view.buf, Py_SAFE_DOWNCAST(view.len, Py_ssize_t, unsigned int)); + PyBuffer_Release(&view); } - - PyBuffer_Release(&view); return (PyObject *)md5p; } Index: Modules/sha256module.c =================================================================== --- Modules/sha256module.c (revision 70085) +++ Modules/sha256module.c (working copy) @@ -629,13 +629,18 @@ if (data_obj) GET_BUFFER_VIEW_OR_ERROUT(data_obj, &buf, NULL); - if ((new = newSHA256object()) == NULL) + if ((new = newSHA256object()) == NULL) { + if (data_obj) + PyBuffer_Release(&buf); return NULL; + } sha_init(new); if (PyErr_Occurred()) { Py_DECREF(new); + if (data_obj) + PyBuffer_Release(&buf); return NULL; } if (data_obj) { @@ -665,13 +670,18 @@ if (data_obj) GET_BUFFER_VIEW_OR_ERROUT(data_obj, &buf, NULL); - if ((new = newSHA224object()) == NULL) + if ((new = newSHA224object()) == NULL) { + if (data_obj) + PyBuffer_Release(&buf); return NULL; + } sha224_init(new); if (PyErr_Occurred()) { Py_DECREF(new); + if (data_obj) + PyBuffer_Release(&buf); return NULL; } if (data_obj) { Index: Modules/sha512module.c =================================================================== --- Modules/sha512module.c (revision 70085) +++ Modules/sha512module.c (working copy) @@ -695,13 +695,18 @@ if (data_obj) GET_BUFFER_VIEW_OR_ERROUT(data_obj, &buf, NULL); - if ((new = newSHA512object()) == NULL) + if ((new = newSHA512object()) == NULL) { + if (data_obj) + PyBuffer_Release(&buf); return NULL; + } sha512_init(new); if (PyErr_Occurred()) { Py_DECREF(new); + if (data_obj) + PyBuffer_Release(&buf); return NULL; } if (data_obj) { @@ -731,13 +736,18 @@ if (data_obj) GET_BUFFER_VIEW_OR_ERROUT(data_obj, &buf, NULL); - if ((new = newSHA384object()) == NULL) + if ((new = newSHA384object()) == NULL) { + if (data_obj) + PyBuffer_Release(&buf); return NULL; + } sha384_init(new); if (PyErr_Occurred()) { Py_DECREF(new); + if (data_obj) + PyBuffer_Release(&buf); return NULL; } if (data_obj) { Index: Modules/shamodule.c =================================================================== --- Modules/shamodule.c (revision 70085) +++ Modules/shamodule.c (working copy) @@ -548,10 +548,12 @@ return NULL; } - GET_BUFFER_VIEW_OR_ERROUT(data_obj, &view, NULL); + if (data_obj) + GET_BUFFER_VIEW_OR_ERROUT(data_obj, &view, NULL); if ((new = newSHAobject()) == NULL) { - PyBuffer_Release(&view); + if (data_obj) + PyBuffer_Release(&view); return NULL; } @@ -559,15 +561,16 @@ if (PyErr_Occurred()) { Py_DECREF(new); - PyBuffer_Release(&view); + if (data_obj) + PyBuffer_Release(&view); return NULL; } if (data_obj) { sha_update(new, (unsigned char*)view.buf, Py_SAFE_DOWNCAST(view.len, Py_ssize_t, unsigned int)); + PyBuffer_Release(&view); } - PyBuffer_Release(&view); return (PyObject *)new; }