mirror of https://github.com/openssl/openssl.git
				
				
				
			Fix memory leaks from missing checks of return value from sk_OPENSSL_STRING_push()
Reviewed-by: Saša Nedvědický <sashan@openssl.org>
Reviewed-by: Tomas Mraz <tomas@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/26238)
(cherry picked from commit d48874ab47)
			
			
This commit is contained in:
		
							parent
							
								
									94a87f4a5a
								
							
						
					
					
						commit
						dea770c888
					
				|  | @ -127,7 +127,8 @@ int asn1parse_main(int argc, char **argv) | |||
|             dump = strtol(opt_arg(), NULL, 0); | ||||
|             break; | ||||
|         case OPT_STRPARSE: | ||||
|             sk_OPENSSL_STRING_push(osk, opt_arg()); | ||||
|             if (sk_OPENSSL_STRING_push(osk, opt_arg()) <= 0) | ||||
|                 goto end; | ||||
|             break; | ||||
|         case OPT_GENSTR: | ||||
|             genstr = opt_arg(); | ||||
|  |  | |||
							
								
								
									
										27
									
								
								apps/cms.c
								
								
								
								
							
							
						
						
									
										27
									
								
								apps/cms.c
								
								
								
								
							|  | @ -505,13 +505,15 @@ int cms_main(int argc, char **argv) | |||
|             if (rr_from == NULL | ||||
|                 && (rr_from = sk_OPENSSL_STRING_new_null()) == NULL) | ||||
|                 goto end; | ||||
|             sk_OPENSSL_STRING_push(rr_from, opt_arg()); | ||||
|             if (sk_OPENSSL_STRING_push(rr_from, opt_arg()) <= 0) | ||||
|                 goto end; | ||||
|             break; | ||||
|         case OPT_RR_TO: | ||||
|             if (rr_to == NULL | ||||
|                 && (rr_to = sk_OPENSSL_STRING_new_null()) == NULL) | ||||
|                 goto end; | ||||
|             sk_OPENSSL_STRING_push(rr_to, opt_arg()); | ||||
|             if (sk_OPENSSL_STRING_push(rr_to, opt_arg()) <= 0) | ||||
|                 goto end; | ||||
|             break; | ||||
|         case OPT_PRINT: | ||||
|             noout = print = 1; | ||||
|  | @ -588,13 +590,15 @@ int cms_main(int argc, char **argv) | |||
|                 if (sksigners == NULL | ||||
|                     && (sksigners = sk_OPENSSL_STRING_new_null()) == NULL) | ||||
|                     goto end; | ||||
|                 sk_OPENSSL_STRING_push(sksigners, signerfile); | ||||
|                 if (sk_OPENSSL_STRING_push(sksigners, signerfile) <= 0) | ||||
|                     goto end; | ||||
|                 if (keyfile == NULL) | ||||
|                     keyfile = signerfile; | ||||
|                 if (skkeys == NULL | ||||
|                     && (skkeys = sk_OPENSSL_STRING_new_null()) == NULL) | ||||
|                     goto end; | ||||
|                 sk_OPENSSL_STRING_push(skkeys, keyfile); | ||||
|                 if (sk_OPENSSL_STRING_push(skkeys, keyfile) <= 0) | ||||
|                     goto end; | ||||
|                 keyfile = NULL; | ||||
|             } | ||||
|             signerfile = opt_arg(); | ||||
|  | @ -612,12 +616,14 @@ int cms_main(int argc, char **argv) | |||
|                 if (sksigners == NULL | ||||
|                     && (sksigners = sk_OPENSSL_STRING_new_null()) == NULL) | ||||
|                     goto end; | ||||
|                 sk_OPENSSL_STRING_push(sksigners, signerfile); | ||||
|                 if (sk_OPENSSL_STRING_push(sksigners, signerfile) <= 0) | ||||
|                     goto end; | ||||
|                 signerfile = NULL; | ||||
|                 if (skkeys == NULL | ||||
|                     && (skkeys = sk_OPENSSL_STRING_new_null()) == NULL) | ||||
|                     goto end; | ||||
|                 sk_OPENSSL_STRING_push(skkeys, keyfile); | ||||
|                 if (sk_OPENSSL_STRING_push(skkeys, keyfile) <= 0) | ||||
|                     goto end; | ||||
|             } | ||||
|             keyfile = opt_arg(); | ||||
|             break; | ||||
|  | @ -671,7 +677,8 @@ int cms_main(int argc, char **argv) | |||
|                     key_param->next = nparam; | ||||
|                 key_param = nparam; | ||||
|             } | ||||
|             sk_OPENSSL_STRING_push(key_param->param, opt_arg()); | ||||
|             if (sk_OPENSSL_STRING_push(key_param->param, opt_arg()) <= 0) | ||||
|                 goto end; | ||||
|             break; | ||||
|         case OPT_V_CASES: | ||||
|             if (!opt_verify(o, vpm)) | ||||
|  | @ -758,12 +765,14 @@ int cms_main(int argc, char **argv) | |||
|             if (sksigners == NULL | ||||
|                 && (sksigners = sk_OPENSSL_STRING_new_null()) == NULL) | ||||
|                 goto end; | ||||
|             sk_OPENSSL_STRING_push(sksigners, signerfile); | ||||
|             if (sk_OPENSSL_STRING_push(sksigners, signerfile) <= 0) | ||||
|                 goto end; | ||||
|             if (skkeys == NULL && (skkeys = sk_OPENSSL_STRING_new_null()) == NULL) | ||||
|                 goto end; | ||||
|             if (keyfile == NULL) | ||||
|                 keyfile = signerfile; | ||||
|             sk_OPENSSL_STRING_push(skkeys, keyfile); | ||||
|             if (sk_OPENSSL_STRING_push(skkeys, keyfile) <= 0) | ||||
|                 goto end; | ||||
|         } | ||||
|         if (sksigners == NULL) { | ||||
|             BIO_printf(bio_err, "No signer certificate specified\n"); | ||||
|  |  | |||
|  | @ -352,10 +352,12 @@ int engine_main(int argc, char **argv) | |||
|             test_avail++; | ||||
|             break; | ||||
|         case OPT_PRE: | ||||
|             sk_OPENSSL_STRING_push(pre_cmds, opt_arg()); | ||||
|             if (sk_OPENSSL_STRING_push(pre_cmds, opt_arg()) <= 0) | ||||
|                 goto end; | ||||
|             break; | ||||
|         case OPT_POST: | ||||
|             sk_OPENSSL_STRING_push(post_cmds, opt_arg()); | ||||
|             if (sk_OPENSSL_STRING_push(post_cmds, opt_arg()) <= 0) | ||||
|                 goto end; | ||||
|             break; | ||||
|         } | ||||
|     } | ||||
|  |  | |||
|  | @ -328,7 +328,8 @@ int pkcs12_main(int argc, char **argv) | |||
|             if (canames == NULL | ||||
|                 && (canames = sk_OPENSSL_STRING_new_null()) == NULL) | ||||
|                 goto end; | ||||
|             sk_OPENSSL_STRING_push(canames, opt_arg()); | ||||
|             if (sk_OPENSSL_STRING_push(canames, opt_arg()) <= 0) | ||||
|                 goto end; | ||||
|             break; | ||||
|         case OPT_IN: | ||||
|             infile = opt_arg(); | ||||
|  |  | |||
							
								
								
									
										18
									
								
								apps/smime.c
								
								
								
								
							
							
						
						
									
										18
									
								
								apps/smime.c
								
								
								
								
							|  | @ -315,13 +315,15 @@ int smime_main(int argc, char **argv) | |||
|                 if (sksigners == NULL | ||||
|                     && (sksigners = sk_OPENSSL_STRING_new_null()) == NULL) | ||||
|                     goto end; | ||||
|                 sk_OPENSSL_STRING_push(sksigners, signerfile); | ||||
|                 if (sk_OPENSSL_STRING_push(sksigners, signerfile) <= 0) | ||||
|                     goto end; | ||||
|                 if (keyfile == NULL) | ||||
|                     keyfile = signerfile; | ||||
|                 if (skkeys == NULL | ||||
|                     && (skkeys = sk_OPENSSL_STRING_new_null()) == NULL) | ||||
|                     goto end; | ||||
|                 sk_OPENSSL_STRING_push(skkeys, keyfile); | ||||
|                 if (sk_OPENSSL_STRING_push(skkeys, keyfile) <= 0) | ||||
|                     goto end; | ||||
|                 keyfile = NULL; | ||||
|             } | ||||
|             signerfile = opt_arg(); | ||||
|  | @ -346,12 +348,14 @@ int smime_main(int argc, char **argv) | |||
|                 if (sksigners == NULL | ||||
|                     && (sksigners = sk_OPENSSL_STRING_new_null()) == NULL) | ||||
|                     goto end; | ||||
|                 sk_OPENSSL_STRING_push(sksigners, signerfile); | ||||
|                 if (sk_OPENSSL_STRING_push(sksigners, signerfile) <= 0) | ||||
|                     goto end; | ||||
|                 signerfile = NULL; | ||||
|                 if (skkeys == NULL | ||||
|                     && (skkeys = sk_OPENSSL_STRING_new_null()) == NULL) | ||||
|                     goto end; | ||||
|                 sk_OPENSSL_STRING_push(skkeys, keyfile); | ||||
|                 if (sk_OPENSSL_STRING_push(skkeys, keyfile) <= 0) | ||||
|                     goto end; | ||||
|             } | ||||
|             keyfile = opt_arg(); | ||||
|             break; | ||||
|  | @ -424,12 +428,14 @@ int smime_main(int argc, char **argv) | |||
|             if (sksigners == NULL | ||||
|                 && (sksigners = sk_OPENSSL_STRING_new_null()) == NULL) | ||||
|                 goto end; | ||||
|             sk_OPENSSL_STRING_push(sksigners, signerfile); | ||||
|             if (sk_OPENSSL_STRING_push(sksigners, signerfile) <= 0) | ||||
|                 goto end; | ||||
|             if (!skkeys && (skkeys = sk_OPENSSL_STRING_new_null()) == NULL) | ||||
|                 goto end; | ||||
|             if (!keyfile) | ||||
|                 keyfile = signerfile; | ||||
|             sk_OPENSSL_STRING_push(skkeys, keyfile); | ||||
|             if (sk_OPENSSL_STRING_push(skkeys, keyfile) <= 0) | ||||
|                 goto end; | ||||
|         } | ||||
|         if (sksigners == NULL) { | ||||
|             BIO_printf(bio_err, "No signer certificate specified\n"); | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue