File tree 13 files changed +49
-18
lines changed 13 files changed +49
-18
lines changed Original file line number Diff line number Diff line change @@ -944,6 +944,15 @@ def test_hash_disallow_instanciation(self):
944
944
):
945
945
HASHXOF ()
946
946
947
+ def test_readonly_types (self ):
948
+ for algorithm , constructors in self .constructors_to_test .items ():
949
+ # all other types have DISALLOW_INSTANTIATION
950
+ for constructor in constructors :
951
+ hash_type = type (constructor ())
952
+ with self .subTest (hash_type = hash_type ):
953
+ with self .assertRaisesRegex (TypeError , "immutable type" ):
954
+ hash_type .value = False
955
+
947
956
948
957
class KDFTests (unittest .TestCase ):
949
958
Original file line number Diff line number Diff line change @@ -444,6 +444,9 @@ def test_internal_types(self):
444
444
):
445
445
C_HMAC ()
446
446
447
+ with self .assertRaisesRegex (TypeError , "immutable type" ):
448
+ C_HMAC .value = None
449
+
447
450
@unittest .skipUnless (sha256_module is not None , 'need _sha256' )
448
451
def test_with_sha256_module (self ):
449
452
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):
345
345
ssl .OP_NO_TLSv1_2
346
346
self .assertEqual (ssl .PROTOCOL_TLS , ssl .PROTOCOL_SSLv23 )
347
347
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
+
348
367
def test_private_init (self ):
349
368
with self .assertRaisesRegex (TypeError , "public constructor" ):
350
369
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[] = {
409
409
PyType_Spec blake2b_type_spec = {
410
410
.name = "_blake2.blake2b" ,
411
411
.basicsize = sizeof (BLAKE2bObject ),
412
- .flags = Py_TPFLAGS_DEFAULT ,
412
+ .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_IMMUTABLETYPE ,
413
413
.slots = blake2b_type_slots
414
414
};
Original file line number Diff line number Diff line change @@ -408,6 +408,6 @@ static PyType_Slot blake2s_type_slots[] = {
408
408
PyType_Spec blake2s_type_spec = {
409
409
.name = "_blake2.blake2s" ,
410
410
.basicsize = sizeof (BLAKE2sObject ),
411
- .flags = Py_TPFLAGS_DEFAULT ,
411
+ .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_IMMUTABLETYPE ,
412
412
.slots = blake2s_type_slots
413
413
};
Original file line number Diff line number Diff line change @@ -588,7 +588,7 @@ static PyType_Spec EVPtype_spec = {
588
588
"_hashlib.HASH" , /*tp_name*/
589
589
sizeof (EVPobject ), /*tp_basicsize*/
590
590
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 ,
592
592
EVPtype_slots
593
593
};
594
594
@@ -737,7 +737,7 @@ static PyType_Spec EVPXOFtype_spec = {
737
737
"_hashlib.HASHXOF" , /*tp_name*/
738
738
sizeof (EVPobject ), /*tp_basicsize*/
739
739
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 ,
741
741
EVPXOFtype_slots
742
742
};
743
743
@@ -1729,7 +1729,7 @@ static PyType_Slot HMACtype_slots[] = {
1729
1729
PyType_Spec HMACtype_spec = {
1730
1730
"_hashlib.HMAC" , /* name */
1731
1731
sizeof (HMACobject ), /* basicsize */
1732
- .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION ,
1732
+ .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION | Py_TPFLAGS_IMMUTABLETYPE ,
1733
1733
.slots = HMACtype_slots ,
1734
1734
};
1735
1735
Original file line number Diff line number Diff line change @@ -525,7 +525,7 @@ static PyGetSetDef SHA3_getseters[] = {
525
525
static PyType_Spec type_spec_obj = { \
526
526
.name = "_sha3." type_name, \
527
527
.basicsize = sizeof(SHA3object), \
528
- .flags = Py_TPFLAGS_DEFAULT, \
528
+ .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_IMMUTABLETYPE , \
529
529
.slots = type_slots \
530
530
}
531
531
Original file line number Diff line number Diff line change @@ -437,7 +437,7 @@ static PyType_Spec sslerror_type_spec = {
437
437
"ssl.SSLError" ,
438
438
sizeof (PyOSErrorObject ),
439
439
0 ,
440
- Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE ,
440
+ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_IMMUTABLETYPE ,
441
441
sslerror_type_slots
442
442
};
443
443
@@ -2906,7 +2906,7 @@ static PyType_Spec PySSLSocket_spec = {
2906
2906
"_ssl._SSLSocket" ,
2907
2907
sizeof (PySSLSocket ),
2908
2908
0 ,
2909
- Py_TPFLAGS_DEFAULT ,
2909
+ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_IMMUTABLETYPE ,
2910
2910
PySSLSocket_slots ,
2911
2911
};
2912
2912
@@ -4644,7 +4644,7 @@ static PyType_Spec PySSLContext_spec = {
4644
4644
"_ssl._SSLContext" ,
4645
4645
sizeof (PySSLContext ),
4646
4646
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 ,
4648
4648
PySSLContext_slots ,
4649
4649
};
4650
4650
@@ -4850,7 +4850,7 @@ static PyType_Spec PySSLMemoryBIO_spec = {
4850
4850
"_ssl.MemoryBIO" ,
4851
4851
sizeof (PySSLMemoryBIO ),
4852
4852
0 ,
4853
- Py_TPFLAGS_DEFAULT ,
4853
+ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_IMMUTABLETYPE ,
4854
4854
PySSLMemoryBIO_slots ,
4855
4855
};
4856
4856
@@ -5025,7 +5025,7 @@ static PyType_Spec PySSLSession_spec = {
5025
5025
"_ssl.SSLSession" ,
5026
5026
sizeof (PySSLSession ),
5027
5027
0 ,
5028
- Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC ,
5028
+ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_IMMUTABLETYPE ,
5029
5029
PySSLSession_slots ,
5030
5030
};
5031
5031
Original file line number Diff line number Diff line change @@ -240,6 +240,6 @@ static PyType_Spec PySSLCertificate_spec = {
240
240
"_ssl.Certificate" ,
241
241
sizeof (PySSLCertificate ),
242
242
0 ,
243
- Py_TPFLAGS_DEFAULT ,
243
+ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION | Py_TPFLAGS_IMMUTABLETYPE ,
244
244
PySSLCertificate_slots ,
245
245
};
Original file line number Diff line number Diff line change @@ -484,7 +484,7 @@ static PyType_Slot md5_type_slots[] = {
484
484
static PyType_Spec md5_type_spec = {
485
485
.name = "_md5.md5" ,
486
486
.basicsize = sizeof (MD5object ),
487
- .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION ,
487
+ .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION | Py_TPFLAGS_IMMUTABLETYPE ,
488
488
.slots = md5_type_slots
489
489
};
490
490
Original file line number Diff line number Diff line change @@ -462,7 +462,7 @@ static PyType_Slot sha1_type_slots[] = {
462
462
static PyType_Spec sha1_type_spec = {
463
463
.name = "_sha1.sha1" ,
464
464
.basicsize = sizeof (SHA1object ),
465
- .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION ,
465
+ .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION | Py_TPFLAGS_IMMUTABLETYPE ,
466
466
.slots = sha1_type_slots
467
467
};
468
468
Original file line number Diff line number Diff line change @@ -544,14 +544,14 @@ static PyType_Slot sha256_types_slots[] = {
544
544
static PyType_Spec sha224_type_spec = {
545
545
.name = "_sha256.sha224" ,
546
546
.basicsize = sizeof (SHAobject ),
547
- .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION ,
547
+ .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION | Py_TPFLAGS_IMMUTABLETYPE ,
548
548
.slots = sha256_types_slots
549
549
};
550
550
551
551
static PyType_Spec sha256_type_spec = {
552
552
.name = "_sha256.sha256" ,
553
553
.basicsize = sizeof (SHAobject ),
554
- .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION ,
554
+ .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION | Py_TPFLAGS_IMMUTABLETYPE ,
555
555
.slots = sha256_types_slots
556
556
};
557
557
Original file line number Diff line number Diff line change @@ -602,7 +602,7 @@ static PyType_Slot sha512_sha384_type_slots[] = {
602
602
static PyType_Spec sha512_sha384_type_spec = {
603
603
.name = "_sha512.sha384" ,
604
604
.basicsize = sizeof (SHAobject ),
605
- .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION ,
605
+ .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION | Py_TPFLAGS_IMMUTABLETYPE ,
606
606
.slots = sha512_sha384_type_slots
607
607
};
608
608
@@ -619,7 +619,7 @@ static PyType_Slot sha512_sha512_type_slots[] = {
619
619
static PyType_Spec sha512_sha512_type_spec = {
620
620
.name = "_sha512.sha512" ,
621
621
.basicsize = sizeof (SHAobject ),
622
- .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION ,
622
+ .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION | Py_TPFLAGS_IMMUTABLETYPE ,
623
623
.slots = sha512_sha512_type_slots
624
624
};
625
625
You can’t perform that action at this time.
0 commit comments