From 82712aed32940e52ab381bf45d8724d5e4847598 Mon Sep 17 00:00:00 2001 From: David Hewitt <1939362+davidhewitt@users.noreply.github.com> Date: Wed, 5 Jul 2023 11:10:02 +0100 Subject: [PATCH] fix `SystemError` raised from `PyUnicodeDecodeError_Create` on PyPy 3.10 --- newsfragments/3297.added.md | 1 + newsfragments/3297.fixed.md | 1 + pyo3-ffi/src/abstract_.rs | 17 +++++++++++++++-- pyo3-ffi/src/pyerrors.rs | 2 +- 4 files changed, 18 insertions(+), 3 deletions(-) create mode 100644 newsfragments/3297.added.md create mode 100644 newsfragments/3297.fixed.md diff --git a/newsfragments/3297.added.md b/newsfragments/3297.added.md new file mode 100644 index 00000000..65d54832 --- /dev/null +++ b/newsfragments/3297.added.md @@ -0,0 +1 @@ +Add FFI definitions `_PyObject_CallFunction_SizeT` and `_PyObject_CallMethod_SizeT`. diff --git a/newsfragments/3297.fixed.md b/newsfragments/3297.fixed.md new file mode 100644 index 00000000..65e211b4 --- /dev/null +++ b/newsfragments/3297.fixed.md @@ -0,0 +1 @@ +Fix `SystemError` raised in `PyUnicodeDecodeError_Create` on PyPy 3.10. diff --git a/pyo3-ffi/src/abstract_.rs b/pyo3-ffi/src/abstract_.rs index 3d167360..0b3b7dbb 100644 --- a/pyo3-ffi/src/abstract_.rs +++ b/pyo3-ffi/src/abstract_.rs @@ -52,8 +52,21 @@ extern "C" { ... ) -> *mut PyObject; - // skipped _PyObject_CallFunction_SizeT - // skipped _PyObject_CallMethod_SizeT + #[cfg(not(Py_3_13))] + #[cfg_attr(PyPy, link_name = "_PyPyObject_CallFunction_SizeT")] + pub fn _PyObject_CallFunction_SizeT( + callable_object: *mut PyObject, + format: *const c_char, + ... + ) -> *mut PyObject; + #[cfg(not(Py_3_13))] + #[cfg_attr(PyPy, link_name = "_PyPyObject_CallMethod_SizeT")] + pub fn _PyObject_CallMethod_SizeT( + o: *mut PyObject, + method: *const c_char, + format: *const c_char, + ... + ) -> *mut PyObject; #[cfg_attr(PyPy, link_name = "PyPyObject_CallFunctionObjArgs")] pub fn PyObject_CallFunctionObjArgs(callable: *mut PyObject, ...) -> *mut PyObject; diff --git a/pyo3-ffi/src/pyerrors.rs b/pyo3-ffi/src/pyerrors.rs index b80f009b..9da00ea3 100644 --- a/pyo3-ffi/src/pyerrors.rs +++ b/pyo3-ffi/src/pyerrors.rs @@ -99,7 +99,7 @@ pub unsafe fn PyUnicodeDecodeError_Create( end: Py_ssize_t, reason: *const c_char, ) -> *mut PyObject { - crate::PyObject_CallFunction( + crate::_PyObject_CallFunction_SizeT( PyExc_UnicodeDecodeError, b"sy#nns\0".as_ptr().cast::(), encoding,