diff --git a/Python/getargs.c b/Python/getargs.c index 4b57153..b5c15e5 100644 --- a/Python/getargs.c +++ b/Python/getargs.c @@ -826,11 +826,17 @@ convertsimple(PyObject *arg, const char **p_format, va_list *p_va, int flags, case 'c': {/* char */ char *p = va_arg(*p_va, char *); - if (PyBytes_Check(arg) && PyBytes_Size(arg) == 1) - *p = PyBytes_AS_STRING(arg)[0]; - else - return converterr("a byte string of length 1", arg, msgbuf, bufsize); - break; + if (PyObject_CheckBuffer(arg)) { + Py_buffer buf; + if (PyObject_GetBuffer(arg, &buf, 0) == 0 && buf.len == 1) { + *p = ((char *)buf.buf)[0]; + PyBuffer_Release(&buf); + break; + } + else + PyErr_Clear(); + } + return converterr("a byte string or buffer of length 1", arg, msgbuf, bufsize); } case 'C': {/* unicode char */