@@ -55,7 +55,7 @@ static const rb_data_type_t ossl_x509ext_type = {
5555    {
5656	0 , ossl_x509ext_free ,
5757    },
58-     0 , 0 , RUBY_TYPED_FREE_IMMEDIATELY  | RUBY_TYPED_WB_PROTECTED ,
58+     0 , 0 , RUBY_TYPED_FREE_IMMEDIATELY  | RUBY_TYPED_WB_PROTECTED  |  RUBY_TYPED_FROZEN_SHAREABLE ,
5959};
6060
6161/* 
@@ -108,7 +108,7 @@ static const rb_data_type_t ossl_x509extfactory_type = {
108108    {
109109	0 , ossl_x509extfactory_free ,
110110    },
111-     0 , 0 , RUBY_TYPED_FREE_IMMEDIATELY  | RUBY_TYPED_WB_PROTECTED ,
111+     0 , 0 , RUBY_TYPED_FREE_IMMEDIATELY  | RUBY_TYPED_WB_PROTECTED  |  RUBY_TYPED_FROZEN_SHAREABLE ,
112112};
113113
114114static  VALUE 
@@ -181,6 +181,7 @@ ossl_x509extfactory_initialize(int argc, VALUE *argv, VALUE self)
181181
182182    rb_scan_args (argc , argv , "04" ,
183183		 & issuer_cert , & subject_cert , & subject_req , & crl );
184+     rb_check_frozen (self );
184185    if  (!NIL_P (issuer_cert ))
185186	ossl_x509extfactory_set_issuer_cert (self , issuer_cert );
186187    if  (!NIL_P (subject_cert ))
@@ -281,6 +282,7 @@ ossl_x509ext_initialize(int argc, VALUE *argv, VALUE self)
281282    const  unsigned char   * p ;
282283    X509_EXTENSION  * ext , * x ;
283284
285+     rb_check_frozen (self );
284286    GetX509Ext (self , ext );
285287    if (rb_scan_args (argc , argv , "12" , & oid , & value , & critical ) ==  1 ){
286288	oid  =  ossl_to_der_if_possible (oid );
@@ -318,12 +320,17 @@ ossl_x509ext_initialize_copy(VALUE self, VALUE other)
318320    return  self ;
319321}
320322
323+ /* 
324+  * call-seq: 
325+  *    extension.oid = string => string 
326+  */ 
321327static  VALUE 
322328ossl_x509ext_set_oid (VALUE  self , VALUE  oid )
323329{
324330    X509_EXTENSION  * ext ;
325331    ASN1_OBJECT  * obj ;
326332
333+     rb_check_frozen (self );
327334    GetX509Ext (self , ext );
328335    obj  =  OBJ_txt2obj (StringValueCStr (oid ), 0 );
329336    if  (!obj )
@@ -337,12 +344,17 @@ ossl_x509ext_set_oid(VALUE self, VALUE oid)
337344    return  oid ;
338345}
339346
347+ /* 
348+  * call-seq: 
349+  *    extension.value = string => string 
350+  */ 
340351static  VALUE 
341352ossl_x509ext_set_value (VALUE  self , VALUE  data )
342353{
343354    X509_EXTENSION  * ext ;
344355    ASN1_OCTET_STRING  * asn1s ;
345356
357+     rb_check_frozen (self );
346358    GetX509Ext (self , ext );
347359    data  =  ossl_to_der_if_possible (data );
348360    StringValue (data );
@@ -356,17 +368,26 @@ ossl_x509ext_set_value(VALUE self, VALUE data)
356368    return  data ;
357369}
358370
371+ /* 
372+  * call-seq: 
373+  *    extension.critical = bool => bool 
374+  */ 
359375static  VALUE 
360376ossl_x509ext_set_critical (VALUE  self , VALUE  flag )
361377{
362378    X509_EXTENSION  * ext ;
363379
380+     rb_check_frozen (self );
364381    GetX509Ext (self , ext );
365382    X509_EXTENSION_set_critical (ext , RTEST (flag ) ? 1  : 0 );
366383
367384    return  flag ;
368385}
369386
387+ /* 
388+  * call-seq: 
389+  *    extension.oid => string 
390+  */ 
370391static  VALUE 
371392ossl_x509ext_get_oid (VALUE  obj )
372393{
@@ -390,6 +411,10 @@ ossl_x509ext_get_oid(VALUE obj)
390411    return  ret ;
391412}
392413
414+ /* 
415+  * call-seq: 
416+  *    extension.value => string 
417+  */ 
393418static  VALUE 
394419ossl_x509ext_get_value (VALUE  obj )
395420{
@@ -420,6 +445,10 @@ ossl_x509ext_get_value_der(VALUE obj)
420445    return  rb_str_new ((const  char  * )value -> data , value -> length );
421446}
422447
448+ /* 
449+  * call-seq: 
450+  *    extension.critical = bool 
451+  */ 
423452static  VALUE 
424453ossl_x509ext_get_critical (VALUE  obj )
425454{
@@ -429,6 +458,10 @@ ossl_x509ext_get_critical(VALUE obj)
429458    return  X509_EXTENSION_get_critical (ext ) ? Qtrue  : Qfalse ;
430459}
431460
461+ /* 
462+  * call-seq: 
463+  *    extension.to_der => string 
464+  */ 
432465static  VALUE 
433466ossl_x509ext_to_der (VALUE  obj )
434467{
0 commit comments