@@ -224,6 +224,10 @@ ossl_x509store_initialize(int argc, VALUE *argv, VALUE self)
224
224
rb_iv_set (self , "@error_string" , Qnil );
225
225
rb_iv_set (self , "@chain" , Qnil );
226
226
227
+ /* added certificate/CRL references */
228
+ rb_iv_set (self , "@certificates" , rb_ary_new ());
229
+ rb_iv_set (self , "@crls" , rb_ary_new ());
230
+
227
231
return self ;
228
232
}
229
233
@@ -449,13 +453,23 @@ ossl_x509store_add_cert(VALUE self, VALUE arg)
449
453
{
450
454
X509_STORE * store ;
451
455
X509 * cert ;
456
+ VALUE certificates ;
452
457
453
458
rb_check_frozen (self );
459
+
460
+ certificates = rb_iv_get (self , "@certificates" );
461
+
462
+
463
+ if (RTEST (rb_funcall (certificates , rb_intern ("include?" ), 1 , arg )))
464
+ return self ;
465
+
454
466
cert = GetX509CertPtr (arg ); /* NO NEED TO DUP */
455
467
GetX509Store (self , store );
456
468
if (X509_STORE_add_cert (store , cert ) != 1 )
457
469
ossl_raise (eX509StoreError , "X509_STORE_add_cert" );
458
470
471
+ rb_ary_push (certificates , arg );
472
+
459
473
return self ;
460
474
}
461
475
@@ -472,13 +486,22 @@ ossl_x509store_add_crl(VALUE self, VALUE arg)
472
486
{
473
487
X509_STORE * store ;
474
488
X509_CRL * crl ;
489
+ VALUE crls ;
475
490
476
491
rb_check_frozen (self );
492
+
493
+ crls = rb_iv_get (self , "@crls" );
494
+
495
+ if (RTEST (rb_funcall (crls , rb_intern ("include?" ), 1 , arg )))
496
+ return self ;
497
+
477
498
crl = GetX509CRLPtr (arg ); /* NO NEED TO DUP */
478
499
GetX509Store (self , store );
479
500
if (X509_STORE_add_crl (store , crl ) != 1 )
480
501
ossl_raise (eX509StoreError , "X509_STORE_add_crl" );
481
502
503
+ rb_ary_push (crls , arg );
504
+
482
505
return self ;
483
506
}
484
507
0 commit comments