@@ -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