summaryrefslogtreecommitdiffstats
path: root/Modules/hashlib.h
diff options
context:
space:
mode:
authorGregory P. Smith <greg@mad-scientist.com>2009-02-12 07:35:29 (GMT)
committerGregory P. Smith <greg@mad-scientist.com>2009-02-12 07:35:29 (GMT)
commit365a1864fd285fc6ee9d9fa1f8770b39d4dab830 (patch)
tree0fb2cf9664348d80caa3e3ace86b84aa2a3f9080 /Modules/hashlib.h
parent3072921d0e668e890da1312e0f47f3e7e4854329 (diff)
downloadcpython-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.h28
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);