File tree Expand file tree Collapse file tree 13 files changed +49
-18
lines changed Expand file tree Collapse file tree 13 files changed +49
-18
lines changed Original file line number Diff line number Diff line change @@ -926,6 +926,15 @@ def test_hash_disallow_instanciation(self):
926926 ):
927927 HASHXOF ()
928928
929+ def test_readonly_types (self ):
930+ for algorithm , constructors in self .constructors_to_test .items ():
931+ # all other types have DISALLOW_INSTANTIATION
932+ for constructor in constructors :
933+ hash_type = type (constructor ())
934+ with self .subTest (hash_type = hash_type ):
935+ with self .assertRaisesRegex (TypeError , "immutable type" ):
936+ hash_type .value = False
937+
929938
930939class KDFTests (unittest .TestCase ):
931940
Original file line number Diff line number Diff line change @@ -444,6 +444,9 @@ def test_internal_types(self):
444444 ):
445445 C_HMAC ()
446446
447+ with self .assertRaisesRegex (TypeError , "immutable type" ):
448+ C_HMAC .value = None
449+
447450 @unittest .skipUnless (sha256_module is not None , 'need _sha256' )
448451 def test_with_sha256_module (self ):
449452 h = hmac .HMAC (b"key" , b"hash this!" , digestmod = sha256_module .sha256 )
Original file line number Diff line number Diff line change @@ -345,6 +345,25 @@ def test_constants(self):
345345 ssl .OP_NO_TLSv1_2
346346 self .assertEqual (ssl .PROTOCOL_TLS , ssl .PROTOCOL_SSLv23 )
347347
348+ def test_ssl_types (self ):
349+ ssl_types = [
350+ _ssl ._SSLContext ,
351+ _ssl ._SSLSocket ,
352+ _ssl .MemoryBIO ,
353+ _ssl .Certificate ,
354+ _ssl .SSLSession ,
355+ _ssl .SSLError ,
356+ ]
357+ for ssl_type in ssl_types :
358+ with self .subTest (ssl_type = ssl_type ):
359+ with self .assertRaisesRegex (TypeError , "immutable type" ):
360+ ssl_type .value = None
361+ with self .assertRaisesRegex (
362+ TypeError ,
363+ "cannot create '_ssl.Certificate' instances"
364+ ):
365+ _ssl .Certificate ()
366+
348367 def test_private_init (self ):
349368 with self .assertRaisesRegex (TypeError , "public constructor" ):
350369 with socket .socket () as s :
Original file line number Diff line number Diff line change @@ -409,6 +409,6 @@ static PyType_Slot blake2b_type_slots[] = {
409409PyType_Spec blake2b_type_spec = {
410410 .name = "_blake2.blake2b" ,
411411 .basicsize = sizeof (BLAKE2bObject ),
412- .flags = Py_TPFLAGS_DEFAULT ,
412+ .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_IMMUTABLETYPE ,
413413 .slots = blake2b_type_slots
414414};
Original file line number Diff line number Diff line change @@ -408,6 +408,6 @@ static PyType_Slot blake2s_type_slots[] = {
408408PyType_Spec blake2s_type_spec = {
409409 .name = "_blake2.blake2s" ,
410410 .basicsize = sizeof (BLAKE2sObject ),
411- .flags = Py_TPFLAGS_DEFAULT ,
411+ .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_IMMUTABLETYPE ,
412412 .slots = blake2s_type_slots
413413};
Original file line number Diff line number Diff line change @@ -588,7 +588,7 @@ static PyType_Spec EVPtype_spec = {
588588 "_hashlib.HASH" , /*tp_name*/
589589 sizeof (EVPobject ), /*tp_basicsize*/
590590 0 , /*tp_itemsize*/
591- Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_DISALLOW_INSTANTIATION ,
591+ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_DISALLOW_INSTANTIATION | Py_TPFLAGS_IMMUTABLETYPE ,
592592 EVPtype_slots
593593};
594594
@@ -737,7 +737,7 @@ static PyType_Spec EVPXOFtype_spec = {
737737 "_hashlib.HASHXOF" , /*tp_name*/
738738 sizeof (EVPobject ), /*tp_basicsize*/
739739 0 , /*tp_itemsize*/
740- Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_DISALLOW_INSTANTIATION ,
740+ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_DISALLOW_INSTANTIATION | Py_TPFLAGS_IMMUTABLETYPE ,
741741 EVPXOFtype_slots
742742};
743743
@@ -1729,7 +1729,7 @@ static PyType_Slot HMACtype_slots[] = {
17291729PyType_Spec HMACtype_spec = {
17301730 "_hashlib.HMAC" , /* name */
17311731 sizeof (HMACobject ), /* basicsize */
1732- .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION ,
1732+ .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION | Py_TPFLAGS_IMMUTABLETYPE ,
17331733 .slots = HMACtype_slots ,
17341734};
17351735
Original file line number Diff line number Diff line change @@ -525,7 +525,7 @@ static PyGetSetDef SHA3_getseters[] = {
525525 static PyType_Spec type_spec_obj = { \
526526 .name = "_sha3." type_name, \
527527 .basicsize = sizeof(SHA3object), \
528- .flags = Py_TPFLAGS_DEFAULT, \
528+ .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_IMMUTABLETYPE , \
529529 .slots = type_slots \
530530 }
531531
Original file line number Diff line number Diff line change @@ -437,7 +437,7 @@ static PyType_Spec sslerror_type_spec = {
437437 "ssl.SSLError" ,
438438 sizeof (PyOSErrorObject ),
439439 0 ,
440- Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE ,
440+ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_IMMUTABLETYPE ,
441441 sslerror_type_slots
442442};
443443
@@ -2906,7 +2906,7 @@ static PyType_Spec PySSLSocket_spec = {
29062906 "_ssl._SSLSocket" ,
29072907 sizeof (PySSLSocket ),
29082908 0 ,
2909- Py_TPFLAGS_DEFAULT ,
2909+ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_IMMUTABLETYPE ,
29102910 PySSLSocket_slots ,
29112911};
29122912
@@ -4644,7 +4644,7 @@ static PyType_Spec PySSLContext_spec = {
46444644 "_ssl._SSLContext" ,
46454645 sizeof (PySSLContext ),
46464646 0 ,
4647- Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC ,
4647+ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_IMMUTABLETYPE ,
46484648 PySSLContext_slots ,
46494649};
46504650
@@ -4850,7 +4850,7 @@ static PyType_Spec PySSLMemoryBIO_spec = {
48504850 "_ssl.MemoryBIO" ,
48514851 sizeof (PySSLMemoryBIO ),
48524852 0 ,
4853- Py_TPFLAGS_DEFAULT ,
4853+ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_IMMUTABLETYPE ,
48544854 PySSLMemoryBIO_slots ,
48554855};
48564856
@@ -5025,7 +5025,7 @@ static PyType_Spec PySSLSession_spec = {
50255025 "_ssl.SSLSession" ,
50265026 sizeof (PySSLSession ),
50275027 0 ,
5028- Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC ,
5028+ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_IMMUTABLETYPE ,
50295029 PySSLSession_slots ,
50305030};
50315031
Original file line number Diff line number Diff line change @@ -240,6 +240,6 @@ static PyType_Spec PySSLCertificate_spec = {
240240 "_ssl.Certificate" ,
241241 sizeof (PySSLCertificate ),
242242 0 ,
243- Py_TPFLAGS_DEFAULT ,
243+ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION | Py_TPFLAGS_IMMUTABLETYPE ,
244244 PySSLCertificate_slots ,
245245};
Original file line number Diff line number Diff line change @@ -484,7 +484,7 @@ static PyType_Slot md5_type_slots[] = {
484484static PyType_Spec md5_type_spec = {
485485 .name = "_md5.md5" ,
486486 .basicsize = sizeof (MD5object ),
487- .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION ,
487+ .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION | Py_TPFLAGS_IMMUTABLETYPE ,
488488 .slots = md5_type_slots
489489};
490490
You can’t perform that action at this time.
0 commit comments