11/*
2- * Copyright 2008-2024 The OpenSSL Project Authors. All Rights Reserved.
2+ * Copyright 2008-2025 The OpenSSL Project Authors. All Rights Reserved.
33 *
44 * Licensed under the Apache License 2.0 (the "License"). You may not use
55 * this file except in compliance with the License. You can obtain a copy
@@ -494,13 +494,15 @@ int cms_main(int argc, char **argv)
494494 if (rr_from == NULL
495495 && (rr_from = sk_OPENSSL_STRING_new_null ()) == NULL )
496496 goto end ;
497- sk_OPENSSL_STRING_push (rr_from , opt_arg ());
497+ if (sk_OPENSSL_STRING_push (rr_from , opt_arg ()) <= 0 )
498+ goto end ;
498499 break ;
499500 case OPT_RR_TO :
500501 if (rr_to == NULL
501502 && (rr_to = sk_OPENSSL_STRING_new_null ()) == NULL )
502503 goto end ;
503- sk_OPENSSL_STRING_push (rr_to , opt_arg ());
504+ if (sk_OPENSSL_STRING_push (rr_to , opt_arg ()) <= 0 )
505+ goto end ;
504506 break ;
505507 case OPT_PRINT :
506508 noout = print = 1 ;
@@ -577,13 +579,15 @@ int cms_main(int argc, char **argv)
577579 if (sksigners == NULL
578580 && (sksigners = sk_OPENSSL_STRING_new_null ()) == NULL )
579581 goto end ;
580- sk_OPENSSL_STRING_push (sksigners , signerfile );
582+ if (sk_OPENSSL_STRING_push (sksigners , signerfile ) <= 0 )
583+ goto end ;
581584 if (keyfile == NULL )
582585 keyfile = signerfile ;
583586 if (skkeys == NULL
584587 && (skkeys = sk_OPENSSL_STRING_new_null ()) == NULL )
585588 goto end ;
586- sk_OPENSSL_STRING_push (skkeys , keyfile );
589+ if (sk_OPENSSL_STRING_push (skkeys , keyfile ) <= 0 )
590+ goto end ;
587591 keyfile = NULL ;
588592 }
589593 signerfile = opt_arg ();
@@ -601,12 +605,14 @@ int cms_main(int argc, char **argv)
601605 if (sksigners == NULL
602606 && (sksigners = sk_OPENSSL_STRING_new_null ()) == NULL )
603607 goto end ;
604- sk_OPENSSL_STRING_push (sksigners , signerfile );
608+ if (sk_OPENSSL_STRING_push (sksigners , signerfile ) <= 0 )
609+ goto end ;
605610 signerfile = NULL ;
606611 if (skkeys == NULL
607612 && (skkeys = sk_OPENSSL_STRING_new_null ()) == NULL )
608613 goto end ;
609- sk_OPENSSL_STRING_push (skkeys , keyfile );
614+ if (sk_OPENSSL_STRING_push (skkeys , keyfile ) <= 0 )
615+ goto end ;
610616 }
611617 keyfile = opt_arg ();
612618 break ;
@@ -660,7 +666,8 @@ int cms_main(int argc, char **argv)
660666 key_param -> next = nparam ;
661667 key_param = nparam ;
662668 }
663- sk_OPENSSL_STRING_push (key_param -> param , opt_arg ());
669+ if (sk_OPENSSL_STRING_push (key_param -> param , opt_arg ()) <= 0 )
670+ goto end ;
664671 break ;
665672 case OPT_V_CASES :
666673 if (!opt_verify (o , vpm ))
@@ -749,12 +756,14 @@ int cms_main(int argc, char **argv)
749756 if (sksigners == NULL
750757 && (sksigners = sk_OPENSSL_STRING_new_null ()) == NULL )
751758 goto end ;
752- sk_OPENSSL_STRING_push (sksigners , signerfile );
759+ if (sk_OPENSSL_STRING_push (sksigners , signerfile ) <= 0 )
760+ goto end ;
753761 if (skkeys == NULL && (skkeys = sk_OPENSSL_STRING_new_null ()) == NULL )
754762 goto end ;
755763 if (keyfile == NULL )
756764 keyfile = signerfile ;
757- sk_OPENSSL_STRING_push (skkeys , keyfile );
765+ if (sk_OPENSSL_STRING_push (skkeys , keyfile ) <= 0 )
766+ goto end ;
758767 }
759768 if (sksigners == NULL ) {
760769 BIO_printf (bio_err , "No signer certificate specified\n" );
@@ -1014,8 +1023,15 @@ int cms_main(int argc, char **argv)
10141023 pwri_tmp = NULL ;
10151024 }
10161025 if (!(flags & CMS_STREAM )) {
1017- if (!CMS_final (cms , in , NULL , flags ))
1026+ if (!CMS_final (cms , in , NULL , flags )) {
1027+ if (originator != NULL
1028+ && ERR_GET_REASON (ERR_peek_error ())
1029+ == CMS_R_ERROR_UNSUPPORTED_STATIC_KEY_AGREEMENT ) {
1030+ BIO_printf (bio_err , "Cannot use originator for encryption\n" );
1031+ goto end ;
1032+ }
10181033 goto end ;
1034+ }
10191035 }
10201036 } else if (operation == SMIME_ENCRYPTED_ENCRYPT ) {
10211037 cms = CMS_EncryptedData_encrypt_ex (in , cipher , secret_key ,
@@ -1261,6 +1277,7 @@ int cms_main(int argc, char **argv)
12611277 X509_free (cert );
12621278 X509_free (recip );
12631279 X509_free (signer );
1280+ X509_free (originator );
12641281 EVP_PKEY_free (key );
12651282 EVP_CIPHER_free (cipher );
12661283 EVP_CIPHER_free (wrap_cipher );
0 commit comments