gh-132983: Make zstd types immutable (#133784)
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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,
|
||||
};
|
||||
|
||||
@@ -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,
|
||||
};
|
||||
|
||||
@@ -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,
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user