mirror of
https://github.com/python/cpython.git
synced 2025-12-05 00:52:25 +00:00
bpo-43916: _md5.md5 uses Py_TPFLAGS_DISALLOW_INSTANTIATION (GH-25753)
The following types use Py_TPFLAGS_DISALLOW_INSTANTIATION flag: * _md5.md5 * _sha1.sha1 * _sha256.sha224 * _sha256.sha256 * _sha512.sha384 * _sha512.sha512
This commit is contained in:
parent
e374a40afa
commit
665c7746fc
5 changed files with 39 additions and 8 deletions
|
|
@ -901,8 +901,39 @@ class HashLibTestCase(unittest.TestCase):
|
||||||
if fips_mode is not None:
|
if fips_mode is not None:
|
||||||
self.assertIsInstance(fips_mode, int)
|
self.assertIsInstance(fips_mode, int)
|
||||||
|
|
||||||
|
def test_disallow_instanciation(self):
|
||||||
|
constructors = []
|
||||||
|
try:
|
||||||
|
import _md5
|
||||||
|
constructors.append(_md5.md5)
|
||||||
|
except ImportError:
|
||||||
|
pass
|
||||||
|
try:
|
||||||
|
import _sha1
|
||||||
|
constructors.append(_sha1.sha1)
|
||||||
|
except ImportError:
|
||||||
|
pass
|
||||||
|
try:
|
||||||
|
import _sha256
|
||||||
|
constructors.append(_sha256.sha224)
|
||||||
|
constructors.append(_sha256.sha256)
|
||||||
|
except ImportError:
|
||||||
|
pass
|
||||||
|
try:
|
||||||
|
import _sha512
|
||||||
|
constructors.append(_sha512.sha384)
|
||||||
|
constructors.append(_sha512.sha512)
|
||||||
|
except ImportError:
|
||||||
|
pass
|
||||||
|
|
||||||
|
for constructor in constructors:
|
||||||
|
h = constructor()
|
||||||
|
with self.subTest(constructor=constructor):
|
||||||
|
hash_type = type(h)
|
||||||
|
self.assertRaises(TypeError, hash_type)
|
||||||
|
|
||||||
@unittest.skipUnless(HASH is not None, 'need _hashlib')
|
@unittest.skipUnless(HASH is not None, 'need _hashlib')
|
||||||
def test_internal_types(self):
|
def test_hash_disallow_instanciation(self):
|
||||||
# internal types like _hashlib.HASH are not constructable
|
# internal types like _hashlib.HASH are not constructable
|
||||||
with self.assertRaisesRegex(
|
with self.assertRaisesRegex(
|
||||||
TypeError, "cannot create '_hashlib.HASH' instance"
|
TypeError, "cannot create '_hashlib.HASH' instance"
|
||||||
|
|
|
||||||
|
|
@ -484,7 +484,7 @@ static PyType_Slot md5_type_slots[] = {
|
||||||
static PyType_Spec md5_type_spec = {
|
static PyType_Spec md5_type_spec = {
|
||||||
.name = "_md5.md5",
|
.name = "_md5.md5",
|
||||||
.basicsize = sizeof(MD5object),
|
.basicsize = sizeof(MD5object),
|
||||||
.flags = Py_TPFLAGS_DEFAULT,
|
.flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION,
|
||||||
.slots = md5_type_slots
|
.slots = md5_type_slots
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -462,7 +462,7 @@ static PyType_Slot sha1_type_slots[] = {
|
||||||
static PyType_Spec sha1_type_spec = {
|
static PyType_Spec sha1_type_spec = {
|
||||||
.name = "_sha1.sha1",
|
.name = "_sha1.sha1",
|
||||||
.basicsize = sizeof(SHA1object),
|
.basicsize = sizeof(SHA1object),
|
||||||
.flags = Py_TPFLAGS_DEFAULT,
|
.flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION,
|
||||||
.slots = sha1_type_slots
|
.slots = sha1_type_slots
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -554,7 +554,7 @@ _sha1_exec(PyObject *module)
|
||||||
}
|
}
|
||||||
|
|
||||||
Py_INCREF(st->sha1_type);
|
Py_INCREF(st->sha1_type);
|
||||||
if (PyModule_AddObject(module,
|
if (PyModule_AddObject(module,
|
||||||
"SHA1Type",
|
"SHA1Type",
|
||||||
(PyObject *)st->sha1_type) < 0) {
|
(PyObject *)st->sha1_type) < 0) {
|
||||||
Py_DECREF(st->sha1_type);
|
Py_DECREF(st->sha1_type);
|
||||||
|
|
|
||||||
|
|
@ -544,14 +544,14 @@ static PyType_Slot sha256_types_slots[] = {
|
||||||
static PyType_Spec sha224_type_spec = {
|
static PyType_Spec sha224_type_spec = {
|
||||||
.name = "_sha256.sha224",
|
.name = "_sha256.sha224",
|
||||||
.basicsize = sizeof(SHAobject),
|
.basicsize = sizeof(SHAobject),
|
||||||
.flags = Py_TPFLAGS_DEFAULT,
|
.flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION,
|
||||||
.slots = sha256_types_slots
|
.slots = sha256_types_slots
|
||||||
};
|
};
|
||||||
|
|
||||||
static PyType_Spec sha256_type_spec = {
|
static PyType_Spec sha256_type_spec = {
|
||||||
.name = "_sha256.sha256",
|
.name = "_sha256.sha256",
|
||||||
.basicsize = sizeof(SHAobject),
|
.basicsize = sizeof(SHAobject),
|
||||||
.flags = Py_TPFLAGS_DEFAULT,
|
.flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION,
|
||||||
.slots = sha256_types_slots
|
.slots = sha256_types_slots
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -602,7 +602,7 @@ static PyType_Slot sha512_sha384_type_slots[] = {
|
||||||
static PyType_Spec sha512_sha384_type_spec = {
|
static PyType_Spec sha512_sha384_type_spec = {
|
||||||
.name = "_sha512.sha384",
|
.name = "_sha512.sha384",
|
||||||
.basicsize = sizeof(SHAobject),
|
.basicsize = sizeof(SHAobject),
|
||||||
.flags = Py_TPFLAGS_DEFAULT,
|
.flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION,
|
||||||
.slots = sha512_sha384_type_slots
|
.slots = sha512_sha384_type_slots
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -619,7 +619,7 @@ static PyType_Slot sha512_sha512_type_slots[] = {
|
||||||
static PyType_Spec sha512_sha512_type_spec = {
|
static PyType_Spec sha512_sha512_type_spec = {
|
||||||
.name = "_sha512.sha512",
|
.name = "_sha512.sha512",
|
||||||
.basicsize = sizeof(SHAobject),
|
.basicsize = sizeof(SHAobject),
|
||||||
.flags = Py_TPFLAGS_DEFAULT,
|
.flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION,
|
||||||
.slots = sha512_sha512_type_slots
|
.slots = sha512_sha512_type_slots
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue