This repository was archived by the owner on Feb 24, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 57
This repository was archived by the owner on Feb 24, 2024. It is now read-only.
SystemError thrown with Python 3.10 #88
Copy link
Copy link
Open
Description
When using the module with Python 3.10 in conjunction with requests-kerberos, a SystemError is thrown in the channelBindings function. This is the stack trace:
File "/usr/lib/python3.10/site-packages/requests/api.py", line 75, in get
return request('get', url, params=params, **kwargs)
File "/usr/lib/python3.10/site-packages/requests/api.py", line 61, in request
return session.request(method=method, url=url, **kwargs)
File "/usr/lib/python3.10/site-packages/requests/sessions.py", line 542, in request
resp = self.send(prep, **send_kwargs)
File "/usr/lib/python3.10/site-packages/requests/sessions.py", line 662, in send
r = dispatch_hook('response', hooks, r, **kwargs)
File "/usr/lib/python3.10/site-packages/requests/hooks.py", line 31, in dispatch_hook
_hook_data = hook(hook_data, **kwargs)
File "/usr/lib/python3.10/site-packages/requests_kerberos/kerberos_.py", line 415, in handle_response
self.cbt_struct = kerberos.channelBindings(application_data=cbt_application_data)
SystemError: PY_SSIZE_T_CLEAN macro must be defined for '#' formatsThis is due to a behavioral change made in Python 3.10 which requires extension modules to use the Py_ssize_t type rather than the int type for string lengths:
- The
PY_SSIZE_T_CLEANmacro must now be defined to use PyArg_ParseTuple() and Py_BuildValue() formats which use #: es#, et#, s#, u#, y#, z#, U# and Z#. See Parsing arguments and building values and the PEP 353.
- https://docs.python.org/3.10/whatsnew/3.10.html#id2
- https://docs.python.org/3.10/c-api/arg.html#arg-parsing
- https://www.python.org/dev/peps/pep-0353
- https://bugs.python.org/issue40943
The following patch resolves the issue:
--- a/src/kerberos.c
+++ b/src/kerberos.c
@@ -14,6 +14,7 @@
* limitations under the License.
**/
+#define PY_SSIZE_T_CLEAN
#include <Python.h>
#include "kerberosbasic.h"
@@ -244,9 +245,9 @@
char *initiator_address = NULL;
char *acceptor_address = NULL;
char *application_data = NULL;
- int initiator_length = 0;
- int acceptor_length = 0;
- int application_length = 0;
+ Py_ssize_t initiator_length = 0;
+ Py_ssize_t acceptor_length = 0;
+ Py_ssize_t application_length = 0;
PyObject *pychan_bindings = NULL;
struct gss_channel_bindings_struct *input_chan_bindings;mariocj89, hroncok, dreness and invokes-su
Metadata
Metadata
Assignees
Labels
No labels