Index: Modules/hashlib.h =================================================================== --- Modules/hashlib.h (Revision 76449) +++ Modules/hashlib.h (Arbeitskopie) @@ -11,18 +11,24 @@ "Unicode-objects must be encoded before hashing");\ return error_return; \ } \ - if (!PyObject_CheckBuffer((obj))) { \ + if (PyObject_CheckBuffer((obj))) { \ + if (PyObject_GetBuffer((obj), (viewp), PyBUF_SIMPLE) == -1) { \ + return error_return; \ + } \ + if ((viewp)->ndim > 1) { \ + PyErr_SetString(PyExc_BufferError, \ + "Buffer must be single dimension"); \ + PyBuffer_Release((viewp)); \ + return error_return; \ + } \ + } else if ((obj)->ob_type->tp_as_buffer && \ + (obj)->ob_type->tp_as_buffer->bf_getreadbuffer && \ + (obj)->ob_type->tp_as_buffer->bf_getsegcount && \ + ((obj)->ob_type->tp_as_buffer->bf_getsegcount)((obj), NULL) == 1) { \ + view.len = ((obj)->ob_type->tp_as_buffer->bf_getreadbuffer)((obj), 0, &view.buf); \ + } else { \ PyErr_SetString(PyExc_TypeError, \ "object supporting the buffer API required"); \ return error_return; \ } \ - if (PyObject_GetBuffer((obj), (viewp), PyBUF_SIMPLE) == -1) { \ - return error_return; \ - } \ - if ((viewp)->ndim > 1) { \ - PyErr_SetString(PyExc_BufferError, \ - "Buffer must be single dimension"); \ - PyBuffer_Release((viewp)); \ - return error_return; \ - } \ } while(0);