diff options
author | Gregory P. Smith <greg@mad-scientist.com> | 2009-02-12 07:35:29 +0000 |
---|---|---|
committer | Gregory P. Smith <greg@mad-scientist.com> | 2009-02-12 07:35:29 +0000 |
commit | 365a1864fd285fc6ee9d9fa1f8770b39d4dab830 (patch) | |
tree | 0fb2cf9664348d80caa3e3ace86b84aa2a3f9080 /Modules/sha512module.c | |
parent | 3072921d0e668e890da1312e0f47f3e7e4854329 (diff) | |
download | cpython-git-365a1864fd285fc6ee9d9fa1f8770b39d4dab830.tar.gz |
Fixes Issue #3745: Fix hashlib to always reject unicode and non
buffer-api supporting objects as input no matter how it was compiled
(built in implementations or external openssl library).
Diffstat (limited to 'Modules/sha512module.c')
-rw-r--r-- | Modules/sha512module.c | 46 |
1 files changed, 30 insertions, 16 deletions
diff --git a/Modules/sha512module.c b/Modules/sha512module.c index 7d67a23b79..17e417e76a 100644 --- a/Modules/sha512module.c +++ b/Modules/sha512module.c @@ -18,6 +18,7 @@ #include "Python.h" #include "structmember.h" +#include "hashlib.h" #ifdef PY_LONG_LONG /* If no PY_LONG_LONG, don't compile anything! */ @@ -546,14 +547,17 @@ PyDoc_STRVAR(SHA512_update__doc__, static PyObject * SHA512_update(SHAobject *self, PyObject *args) { - unsigned char *cp; - int len; + PyObject *obj; + Py_buffer buf; - if (!PyArg_ParseTuple(args, "s#:update", &cp, &len)) + if (!PyArg_ParseTuple(args, "O:update", &obj)) return NULL; - sha512_update(self, cp, len); + GET_BUFFER_VIEW_OR_ERROUT(obj, &buf); + sha512_update(self, buf.buf, buf.len); + + PyBuffer_Release(&buf); Py_INCREF(Py_None); return Py_None; } @@ -680,14 +684,17 @@ SHA512_new(PyObject *self, PyObject *args, PyObject *kwdict) { static char *kwlist[] = {"string", NULL}; SHAobject *new; - unsigned char *cp = NULL; - int len; + PyObject *data_obj = NULL; + Py_buffer buf; - if (!PyArg_ParseTupleAndKeywords(args, kwdict, "|s#:new", kwlist, - &cp, &len)) { + if (!PyArg_ParseTupleAndKeywords(args, kwdict, "|O:new", kwlist, + &data_obj)) { return NULL; } + if (data_obj) + GET_BUFFER_VIEW_OR_ERROUT(data_obj, &buf); + if ((new = newSHA512object()) == NULL) return NULL; @@ -697,8 +704,10 @@ SHA512_new(PyObject *self, PyObject *args, PyObject *kwdict) Py_DECREF(new); return NULL; } - if (cp) - sha512_update(new, cp, len); + if (data_obj) { + sha512_update(new, buf.buf, buf.len); + PyBuffer_Release(&buf); + } return (PyObject *)new; } @@ -711,14 +720,17 @@ SHA384_new(PyObject *self, PyObject *args, PyObject *kwdict) { static char *kwlist[] = {"string", NULL}; SHAobject *new; - unsigned char *cp = NULL; - int len; + PyObject *data_obj = NULL; + Py_buffer buf; - if (!PyArg_ParseTupleAndKeywords(args, kwdict, "|s#:new", kwlist, - &cp, &len)) { + if (!PyArg_ParseTupleAndKeywords(args, kwdict, "|O:new", kwlist, + &data_obj)) { return NULL; } + if (data_obj) + GET_BUFFER_VIEW_OR_ERROUT(data_obj, &buf); + if ((new = newSHA384object()) == NULL) return NULL; @@ -728,8 +740,10 @@ SHA384_new(PyObject *self, PyObject *args, PyObject *kwdict) Py_DECREF(new); return NULL; } - if (cp) - sha512_update(new, cp, len); + if (data_obj) { + sha512_update(new, buf.buf, buf.len); + PyBuffer_Release(&buf); + } return (PyObject *)new; } |