summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Lib/test/test_hashlib.py33
-rw-r--r--Modules/md5module.c2
-rw-r--r--Modules/sha1module.c4
-rw-r--r--Modules/sha256module.c4
-rw-r--r--Modules/sha512module.c4
5 files changed, 39 insertions, 8 deletions
diff --git a/Lib/test/test_hashlib.py b/Lib/test/test_hashlib.py
index 1236aa7..c7c128e 100644
--- a/Lib/test/test_hashlib.py
+++ b/Lib/test/test_hashlib.py
@@ -901,8 +901,39 @@ class HashLibTestCase(unittest.TestCase):
if fips_mode is not None:
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')
- def test_internal_types(self):
+ def test_hash_disallow_instanciation(self):
# internal types like _hashlib.HASH are not constructable
with self.assertRaisesRegex(
TypeError, "cannot create '_hashlib.HASH' instance"
diff --git a/Modules/md5module.c b/Modules/md5module.c
index b2e65a0..2ae94a4 100644
--- a/Modules/md5module.c
+++ b/Modules/md5module.c
@@ -484,7 +484,7 @@ static PyType_Slot md5_type_slots[] = {
static PyType_Spec md5_type_spec = {
.name = "_md5.md5",
.basicsize = sizeof(MD5object),
- .flags = Py_TPFLAGS_DEFAULT,
+ .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION,
.slots = md5_type_slots
};
diff --git a/Modules/sha1module.c b/Modules/sha1module.c
index 7126db9..9ac46c5 100644
--- a/Modules/sha1module.c
+++ b/Modules/sha1module.c
@@ -462,7 +462,7 @@ static PyType_Slot sha1_type_slots[] = {
static PyType_Spec sha1_type_spec = {
.name = "_sha1.sha1",
.basicsize = sizeof(SHA1object),
- .flags = Py_TPFLAGS_DEFAULT,
+ .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION,
.slots = sha1_type_slots
};
@@ -554,7 +554,7 @@ _sha1_exec(PyObject *module)
}
Py_INCREF(st->sha1_type);
- if (PyModule_AddObject(module,
+ if (PyModule_AddObject(module,
"SHA1Type",
(PyObject *)st->sha1_type) < 0) {
Py_DECREF(st->sha1_type);
diff --git a/Modules/sha256module.c b/Modules/sha256module.c
index b90e5df..ccb1862 100644
--- a/Modules/sha256module.c
+++ b/Modules/sha256module.c
@@ -544,14 +544,14 @@ static PyType_Slot sha256_types_slots[] = {
static PyType_Spec sha224_type_spec = {
.name = "_sha256.sha224",
.basicsize = sizeof(SHAobject),
- .flags = Py_TPFLAGS_DEFAULT,
+ .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION,
.slots = sha256_types_slots
};
static PyType_Spec sha256_type_spec = {
.name = "_sha256.sha256",
.basicsize = sizeof(SHAobject),
- .flags = Py_TPFLAGS_DEFAULT,
+ .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION,
.slots = sha256_types_slots
};
diff --git a/Modules/sha512module.c b/Modules/sha512module.c
index 0d8f51e..5e8572c 100644
--- a/Modules/sha512module.c
+++ b/Modules/sha512module.c
@@ -602,7 +602,7 @@ static PyType_Slot sha512_sha384_type_slots[] = {
static PyType_Spec sha512_sha384_type_spec = {
.name = "_sha512.sha384",
.basicsize = sizeof(SHAobject),
- .flags = Py_TPFLAGS_DEFAULT,
+ .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION,
.slots = sha512_sha384_type_slots
};
@@ -619,7 +619,7 @@ static PyType_Slot sha512_sha512_type_slots[] = {
static PyType_Spec sha512_sha512_type_spec = {
.name = "_sha512.sha512",
.basicsize = sizeof(SHAobject),
- .flags = Py_TPFLAGS_DEFAULT,
+ .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION,
.slots = sha512_sha512_type_slots
};