66 lines
2.0 KiB
C
66 lines
2.0 KiB
C
|
|
#include "hashlib_buffer.h"
|
||
|
|
|
||
|
|
int
|
||
|
|
_Py_hashlib_data_argument(PyObject **res, PyObject *data, PyObject *string)
|
||
|
|
{
|
||
|
|
if (data != NULL && string == NULL) {
|
||
|
|
// called as H(data) or H(data=...)
|
||
|
|
*res = data;
|
||
|
|
return 1;
|
||
|
|
}
|
||
|
|
else if (data == NULL && string != NULL) {
|
||
|
|
// called as H(string=...)
|
||
|
|
if (PyErr_WarnEx(PyExc_DeprecationWarning,
|
||
|
|
"the 'string' keyword parameter is deprecated since "
|
||
|
|
"Python 3.15 and slated for removal in Python 3.19; "
|
||
|
|
"use the 'data' keyword parameter or pass the data "
|
||
|
|
"to hash as a positional argument instead", 1) < 0)
|
||
|
|
{
|
||
|
|
*res = NULL;
|
||
|
|
return -1;
|
||
|
|
}
|
||
|
|
*res = string;
|
||
|
|
return 1;
|
||
|
|
}
|
||
|
|
else if (data == NULL && string == NULL) {
|
||
|
|
// fast path when no data is given
|
||
|
|
assert(!PyErr_Occurred());
|
||
|
|
*res = NULL;
|
||
|
|
return 0;
|
||
|
|
}
|
||
|
|
else {
|
||
|
|
// called as H(data=..., string)
|
||
|
|
*res = NULL;
|
||
|
|
PyErr_SetString(PyExc_TypeError,
|
||
|
|
"'data' and 'string' are mutually exclusive "
|
||
|
|
"and support for 'string' keyword parameter "
|
||
|
|
"is slated for removal in a future version.");
|
||
|
|
return -1;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
int
|
||
|
|
_Py_hashlib_get_buffer_view(PyObject *obj, Py_buffer *view)
|
||
|
|
{
|
||
|
|
if (PyUnicode_Check(obj)) {
|
||
|
|
PyErr_SetString(PyExc_TypeError,
|
||
|
|
"Strings must be encoded before hashing");
|
||
|
|
return -1;
|
||
|
|
}
|
||
|
|
if (!PyObject_CheckBuffer(obj)) {
|
||
|
|
PyErr_SetString(PyExc_TypeError,
|
||
|
|
"object supporting the buffer API required");
|
||
|
|
return -1;
|
||
|
|
}
|
||
|
|
if (PyObject_GetBuffer(obj, view, PyBUF_SIMPLE) == -1) {
|
||
|
|
return -1;
|
||
|
|
}
|
||
|
|
if (view->ndim > 1) {
|
||
|
|
PyErr_SetString(PyExc_BufferError,
|
||
|
|
"Buffer must be single dimension");
|
||
|
|
PyBuffer_Release(view);
|
||
|
|
return -1;
|
||
|
|
}
|
||
|
|
return 0;
|
||
|
|
}
|