https://github.com/python/cpython/commit/1a87b6e9ae6da255f30465ed59a78913ebf2e898
commit: 1a87b6e9ae6da255f30465ed59a78913ebf2e898
branch: main
author: Adam Turner <9087854+aa-tur...@users.noreply.github.com>
committer: AA-Turner <9087854+aa-tur...@users.noreply.github.com>
date: 2025-05-10T22:37:17Z
summary:

gh-132983: Make zstd types immutable (#133784)

files:
M Modules/_zstd/_zstdmodule.c
M Modules/_zstd/compressor.c
M Modules/_zstd/decompressor.c
M Modules/_zstd/zstddict.c

diff --git a/Modules/_zstd/_zstdmodule.c b/Modules/_zstd/_zstdmodule.c
index bddef0d0b864cd..c3852fe89732bc 100644
--- a/Modules/_zstd/_zstdmodule.c
+++ b/Modules/_zstd/_zstdmodule.c
@@ -679,6 +679,9 @@ do {                                                        
                 \
     ADD_INT_CONST_TO_TYPE(mod_state->ZstdCompressor_type,
                           "FLUSH_FRAME", ZSTD_e_end);
 
+    /* Make ZstdCompressor immutable (set Py_TPFLAGS_IMMUTABLETYPE) */
+    PyType_Freeze(mod_state->ZstdCompressor_type);
+
 #undef ADD_TYPE
 #undef ADD_INT_MACRO
 #undef ADD_ZSTD_COMPRESSOR_INT_CONST
diff --git a/Modules/_zstd/compressor.c b/Modules/_zstd/compressor.c
index e70eb637b29f3e..355a27d2734a1b 100644
--- a/Modules/_zstd/compressor.c
+++ b/Modules/_zstd/compressor.c
@@ -729,6 +729,9 @@ static PyType_Slot zstdcompressor_slots[] = {
 PyType_Spec zstd_compressor_type_spec = {
     .name = "compression.zstd.ZstdCompressor",
     .basicsize = sizeof(ZstdCompressor),
+    // Py_TPFLAGS_IMMUTABLETYPE is not used here as several
+    // associated constants need to be added to the type.
+    // PyType_Freeze is called later to set the flag.
     .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC,
     .slots = zstdcompressor_slots,
 };
diff --git a/Modules/_zstd/decompressor.c b/Modules/_zstd/decompressor.c
index 2ed88cd3f231f1..a654a9540e1f05 100644
--- a/Modules/_zstd/decompressor.c
+++ b/Modules/_zstd/decompressor.c
@@ -902,6 +902,7 @@ static PyType_Slot ZstdDecompressor_slots[] = {
 PyType_Spec zstd_decompressor_type_spec = {
     .name = "compression.zstd.ZstdDecompressor",
     .basicsize = sizeof(ZstdDecompressor),
-    .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC,
+    .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_IMMUTABLETYPE
+             | Py_TPFLAGS_HAVE_GC,
     .slots = ZstdDecompressor_slots,
 };
diff --git a/Modules/_zstd/zstddict.c b/Modules/_zstd/zstddict.c
index 99976cef85a210..47bc8a84ca24a7 100644
--- a/Modules/_zstd/zstddict.c
+++ b/Modules/_zstd/zstddict.c
@@ -278,6 +278,7 @@ static PyType_Slot zstddict_slots[] = {
 PyType_Spec zstd_dict_type_spec = {
     .name = "compression.zstd.ZstdDict",
     .basicsize = sizeof(ZstdDict),
-    .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC,
+    .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_IMMUTABLETYPE
+             | Py_TPFLAGS_HAVE_GC,
     .slots = zstddict_slots,
 };

_______________________________________________
Python-checkins mailing list -- python-checkins@python.org
To unsubscribe send an email to python-checkins-le...@python.org
https://mail.python.org/mailman3/lists/python-checkins.python.org/
Member address: arch...@mail-archive.com

Reply via email to