diff options
author | Gregory P. Smith <greg@mad-scientist.com> | 2009-02-12 07:35:29 (GMT) |
---|---|---|
committer | Gregory P. Smith <greg@mad-scientist.com> | 2009-02-12 07:35:29 (GMT) |
commit | 365a1864fd285fc6ee9d9fa1f8770b39d4dab830 (patch) | |
tree | 0fb2cf9664348d80caa3e3ace86b84aa2a3f9080 /Modules/hashlib.h | |
parent | 3072921d0e668e890da1312e0f47f3e7e4854329 (diff) | |
download | cpython-365a1864fd285fc6ee9d9fa1f8770b39d4dab830.zip cpython-365a1864fd285fc6ee9d9fa1f8770b39d4dab830.tar.gz cpython-365a1864fd285fc6ee9d9fa1f8770b39d4dab830.tar.bz2 |
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/hashlib.h')
-rw-r--r-- | Modules/hashlib.h | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/Modules/hashlib.h b/Modules/hashlib.h new file mode 100644 index 0000000..db39cea --- /dev/null +++ b/Modules/hashlib.h @@ -0,0 +1,28 @@ +/* Common code for use by all hashlib related modules. */ + +/* + * Given a PyObject* obj, fill in the Py_buffer* viewp with the result + * of PyObject_GetBuffer. Sets and exception and issues a return NULL + * on any errors. + */ +#define GET_BUFFER_VIEW_OR_ERROUT(obj, viewp) do { \ + if (PyUnicode_Check((obj))) { \ + PyErr_SetString(PyExc_TypeError, \ + "Unicode-objects must be encoded before hashing");\ + return NULL; \ + } \ + if (!PyObject_CheckBuffer((obj))) { \ + PyErr_SetString(PyExc_TypeError, \ + "object supporting the buffer API required"); \ + return NULL; \ + } \ + if (PyObject_GetBuffer((obj), (viewp), PyBUF_SIMPLE) == -1) { \ + return NULL; \ + } \ + if ((viewp)->ndim > 1) { \ + PyErr_SetString(PyExc_BufferError, \ + "Buffer must be single dimension"); \ + PyBuffer_Release((viewp)); \ + return NULL; \ + } \ + } while(0); |