@@ -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
@@ -128,6 +128,7 @@ ossl_x509extfactory_set_issuer_cert(VALUE self, VALUE cert)
128128{
129129 X509V3_CTX * ctx ;
130130
131+ rb_check_frozen (self );
131132 GetX509ExtFactory (self , ctx );
132133 rb_iv_set (self , "@issuer_certificate" , cert );
133134 ctx -> issuer_cert = GetX509CertPtr (cert ); /* NO DUP NEEDED */
@@ -140,6 +141,7 @@ ossl_x509extfactory_set_subject_cert(VALUE self, VALUE cert)
140141{
141142 X509V3_CTX * ctx ;
142143
144+ rb_check_frozen (self );
143145 GetX509ExtFactory (self , ctx );
144146 rb_iv_set (self , "@subject_certificate" , cert );
145147 ctx -> subject_cert = GetX509CertPtr (cert ); /* NO DUP NEEDED */
@@ -152,6 +154,7 @@ ossl_x509extfactory_set_subject_req(VALUE self, VALUE req)
152154{
153155 X509V3_CTX * ctx ;
154156
157+ rb_check_frozen (self );
155158 GetX509ExtFactory (self , ctx );
156159 rb_iv_set (self , "@subject_request" , req );
157160 ctx -> subject_req = GetX509ReqPtr (req ); /* NO DUP NEEDED */
@@ -164,6 +167,7 @@ ossl_x509extfactory_set_crl(VALUE self, VALUE crl)
164167{
165168 X509V3_CTX * ctx ;
166169
170+ rb_check_frozen (self );
167171 GetX509ExtFactory (self , ctx );
168172 rb_iv_set (self , "@crl" , crl );
169173 ctx -> crl = GetX509CRLPtr (crl ); /* NO DUP NEEDED */
@@ -181,6 +185,7 @@ ossl_x509extfactory_initialize(int argc, VALUE *argv, VALUE self)
181185
182186 rb_scan_args (argc , argv , "04" ,
183187 & issuer_cert , & subject_cert , & subject_req , & crl );
188+ rb_check_frozen (self );
184189 if (!NIL_P (issuer_cert ))
185190 ossl_x509extfactory_set_issuer_cert (self , issuer_cert );
186191 if (!NIL_P (subject_cert ))
@@ -281,6 +286,7 @@ ossl_x509ext_initialize(int argc, VALUE *argv, VALUE self)
281286 const unsigned char * p ;
282287 X509_EXTENSION * ext , * x ;
283288
289+ rb_check_frozen (self );
284290 GetX509Ext (self , ext );
285291 if (rb_scan_args (argc , argv , "12" , & oid , & value , & critical ) == 1 ){
286292 oid = ossl_to_der_if_possible (oid );
@@ -318,12 +324,17 @@ ossl_x509ext_initialize_copy(VALUE self, VALUE other)
318324 return self ;
319325}
320326
327+ /*
328+ * call-seq:
329+ * extension.oid = string
330+ */
321331static VALUE
322332ossl_x509ext_set_oid (VALUE self , VALUE oid )
323333{
324334 X509_EXTENSION * ext ;
325335 ASN1_OBJECT * obj ;
326336
337+ rb_check_frozen (self );
327338 GetX509Ext (self , ext );
328339 obj = OBJ_txt2obj (StringValueCStr (oid ), 0 );
329340 if (!obj )
@@ -337,12 +348,17 @@ ossl_x509ext_set_oid(VALUE self, VALUE oid)
337348 return oid ;
338349}
339350
351+ /*
352+ * call-seq:
353+ * extension.value = string => string
354+ */
340355static VALUE
341356ossl_x509ext_set_value (VALUE self , VALUE data )
342357{
343358 X509_EXTENSION * ext ;
344359 ASN1_OCTET_STRING * asn1s ;
345360
361+ rb_check_frozen (self );
346362 GetX509Ext (self , ext );
347363 data = ossl_to_der_if_possible (data );
348364 StringValue (data );
@@ -356,17 +372,26 @@ ossl_x509ext_set_value(VALUE self, VALUE data)
356372 return data ;
357373}
358374
375+ /*
376+ * call-seq:
377+ * extension.critical = bool => bool
378+ */
359379static VALUE
360380ossl_x509ext_set_critical (VALUE self , VALUE flag )
361381{
362382 X509_EXTENSION * ext ;
363383
384+ rb_check_frozen (self );
364385 GetX509Ext (self , ext );
365386 X509_EXTENSION_set_critical (ext , RTEST (flag ) ? 1 : 0 );
366387
367388 return flag ;
368389}
369390
391+ /*
392+ * call-seq:
393+ * extension.oid => string
394+ */
370395static VALUE
371396ossl_x509ext_get_oid (VALUE obj )
372397{
@@ -390,6 +415,10 @@ ossl_x509ext_get_oid(VALUE obj)
390415 return ret ;
391416}
392417
418+ /*
419+ * call-seq:
420+ * extension.value => string
421+ */
393422static VALUE
394423ossl_x509ext_get_value (VALUE obj )
395424{
@@ -420,6 +449,10 @@ ossl_x509ext_get_value_der(VALUE obj)
420449 return rb_str_new ((const char * )value -> data , value -> length );
421450}
422451
452+ /*
453+ * call-seq:
454+ * extension.critical? => bool
455+ */
423456static VALUE
424457ossl_x509ext_get_critical (VALUE obj )
425458{
@@ -429,6 +462,10 @@ ossl_x509ext_get_critical(VALUE obj)
429462 return X509_EXTENSION_get_critical (ext ) ? Qtrue : Qfalse ;
430463}
431464
465+ /*
466+ * call-seq:
467+ * extension.to_der => string
468+ */
432469static VALUE
433470ossl_x509ext_to_der (VALUE obj )
434471{
0 commit comments