From 9978ed588baa2cf804794b8ee9f765a316ab16e2 Mon Sep 17 00:00:00 2001 From: Aaron Gokaslan Date: Fri, 10 Sep 2021 14:23:32 -0400 Subject: [PATCH] Fix capsule bug (#3261) Thanks Aaron for jumping in fixing this! --- include/pybind11/pytypes.h | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/include/pybind11/pytypes.h b/include/pybind11/pytypes.h index 2de3f5f10..a1cf6bef0 100644 --- a/include/pybind11/pytypes.h +++ b/include/pybind11/pytypes.h @@ -1414,14 +1414,19 @@ public: T* get_pointer() const { auto name = this->name(); T *result = static_cast(PyCapsule_GetPointer(m_ptr, name)); - if (!result) pybind11_fail("Unable to extract capsule contents!"); + if (!result) { + PyErr_Clear(); + pybind11_fail("Unable to extract capsule contents!"); + } return result; } /// Replaces a capsule's pointer *without* calling the destructor on the existing one. void set_pointer(const void *value) { - if (PyCapsule_SetPointer(m_ptr, const_cast(value)) != 0) + if (PyCapsule_SetPointer(m_ptr, const_cast(value)) != 0) { + PyErr_Clear(); pybind11_fail("Could not set capsule pointer"); + } } const char *name() const { return PyCapsule_GetName(m_ptr); }