Skip to content

Commit 83d3032

Browse files
committed
Free allocated OSSL_PARAM_BLD on failures when iterating
1 parent aad0d28 commit 83d3032

File tree

1 file changed

+22
-6
lines changed

1 file changed

+22
-6
lines changed

ext/openssl/ossl_pkey.c

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -441,24 +441,31 @@ add_ec_parameters_to_builder(VALUE key, VALUE value, VALUE arg) {
441441

442442
if(strcmp(OSSL_PKEY_PARAM_GROUP_NAME, key_ptr) == 0) {
443443
StringValue(value);
444-
if(!OSSL_PARAM_BLD_push_utf8_string(params_builder, key_ptr, RSTRING_PTR(value), RSTRING_LENINT(value)))
444+
if(!OSSL_PARAM_BLD_push_utf8_string(params_builder, key_ptr, RSTRING_PTR(value), RSTRING_LENINT(value))) {
445+
OSSL_PARAM_BLD_free(params_builder);
445446
ossl_raise(ePKeyError, "OSSL_PARAM_BLD_push_utf8_string");
447+
}
446448
return ST_CONTINUE;
447449
}
448450

449451
if(strcmp(OSSL_PKEY_PARAM_PUB_KEY, key_ptr) == 0) {
450452
StringValue(value);
451-
if(!OSSL_PARAM_BLD_push_octet_string(params_builder, OSSL_PKEY_PARAM_PUB_KEY, RSTRING_PTR(value), RSTRING_LENINT(value)))
453+
if(!OSSL_PARAM_BLD_push_octet_string(params_builder, OSSL_PKEY_PARAM_PUB_KEY, RSTRING_PTR(value), RSTRING_LENINT(value))) {
454+
OSSL_PARAM_BLD_free(params_builder);
452455
ossl_raise(ePKeyError, "OSSL_PARAM_BLD_push_octet_string");
456+
}
453457
return ST_CONTINUE;
454458
}
455459

456460
if(strcmp(OSSL_PKEY_PARAM_PRIV_KEY, key_ptr) == 0) {
457-
if(!OSSL_PARAM_BLD_push_BN(params_builder, OSSL_PKEY_PARAM_PRIV_KEY, GetBNPtr(value)))
461+
if(!OSSL_PARAM_BLD_push_BN(params_builder, OSSL_PKEY_PARAM_PRIV_KEY, GetBNPtr(value))) {
462+
OSSL_PARAM_BLD_free(params_builder);
458463
ossl_raise(ePKeyError, "OSSL_PARAM_BLD_push_BN");
464+
}
459465
return ST_CONTINUE;
460466
}
461467

468+
OSSL_PARAM_BLD_free(params_builder);
462469
ossl_raise(ePKeyError, "Unsupported parameter \"%s\"", key_ptr);
463470
}
464471

@@ -524,11 +531,15 @@ add_rsa_parameters_to_builder(VALUE key, VALUE value, VALUE arg) {
524531
strcmp(OSSL_PKEY_PARAM_RSA_COEFFICIENT7, key_ptr) == 0 ||
525532
strcmp(OSSL_PKEY_PARAM_RSA_COEFFICIENT8, key_ptr) == 0 ||
526533
strcmp(OSSL_PKEY_PARAM_RSA_COEFFICIENT9, key_ptr) == 0) {
527-
if(!OSSL_PARAM_BLD_push_BN(params_builder, key_ptr, GetBNPtr(value)))
534+
if(!OSSL_PARAM_BLD_push_BN(params_builder, key_ptr, GetBNPtr(value))) {
535+
OSSL_PARAM_BLD_free(params_builder);
528536
ossl_raise(ePKeyError, "OSSL_PARAM_BLD_push_BN");
537+
}
538+
529539
return ST_CONTINUE;
530540
}
531541

542+
OSSL_PARAM_BLD_free(params_builder);
532543
ossl_raise(ePKeyError, "Unsupported parameter \"%s\"", key_ptr);
533544
}
534545

@@ -571,18 +582,23 @@ add_ffc_parameters_to_builder(VALUE key, VALUE value, VALUE arg) {
571582
strcmp(OSSL_PKEY_PARAM_FFC_VALIDATE_PQ, key_ptr) == 0 ||
572583
strcmp(OSSL_PKEY_PARAM_FFC_VALIDATE_G, key_ptr) == 0 ||
573584
strcmp(OSSL_PKEY_PARAM_FFC_VALIDATE_LEGACY, key_ptr) == 0) {
574-
if(!OSSL_PARAM_BLD_push_BN(params_builder, key_ptr, GetBNPtr(value)))
585+
if(!OSSL_PARAM_BLD_push_BN(params_builder, key_ptr, GetBNPtr(value))) {
586+
OSSL_PARAM_BLD_free(params_builder);
575587
ossl_raise(ePKeyError, "OSSL_PARAM_BLD_push_BN");
588+
}
576589
return ST_CONTINUE;
577590
}
578591

579592
if(strcmp(OSSL_PKEY_PARAM_FFC_SEED, key_ptr) == 0) {
580593
StringValue(value);
581-
if(!OSSL_PARAM_BLD_push_octet_string(params_builder, key_ptr, RSTRING_PTR(value), RSTRING_LENINT(value)))
594+
if(!OSSL_PARAM_BLD_push_octet_string(params_builder, key_ptr, RSTRING_PTR(value), RSTRING_LENINT(value))) {
595+
OSSL_PARAM_BLD_free(params_builder);
582596
ossl_raise(ePKeyError, "OSSL_PARAM_BLD_push_octet_string");
597+
}
583598
return ST_CONTINUE;
584599
}
585600

601+
OSSL_PARAM_BLD_free(params_builder);
586602
ossl_raise(ePKeyError, "Unsupported parameter \"%s\"", key_ptr);
587603
}
588604

0 commit comments

Comments
 (0)