From d5215420d70aa9927e60b5875908fb730f279fb7 Mon Sep 17 00:00:00 2001 From: Adam Reichold Date: Tue, 19 Dec 2023 14:59:38 +0100 Subject: [PATCH] Defend against mutable type objects when extracting their full name. --- src/types/typeobject.rs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/types/typeobject.rs b/src/types/typeobject.rs index da2ac33034d..9ce5537aaf0 100644 --- a/src/types/typeobject.rs +++ b/src/types/typeobject.rs @@ -57,9 +57,15 @@ impl PyType { pub fn name(&self) -> PyResult> { #[cfg(not(any(Py_LIMITED_API, PyPy)))] { - let name = unsafe { CStr::from_ptr((*self.as_type_ptr()).tp_name) }.to_str()?; + let ptr = self.as_type_ptr(); - Ok(Cow::Borrowed(name)) + let name = unsafe { CStr::from_ptr((*ptr).tp_name) }.to_str()?; + + if unsafe { ffi::PyType_HasFeature(ptr, ffi::Py_TPFLAGS_IMMUTABLETYPE) } != 0 { + Ok(Cow::Borrowed(name)) + } else { + Ok(Cow::Owned(name.to_owned())) + } } #[cfg(any(Py_LIMITED_API, PyPy))]