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); |             dump = strtol(opt_arg(), NULL, 0); | ||||||
|             break; |             break; | ||||||
|         case OPT_STRPARSE: |         case OPT_STRPARSE: | ||||||
|             sk_OPENSSL_STRING_push(osk, opt_arg()); |             if (sk_OPENSSL_STRING_push(osk, opt_arg()) <= 0) | ||||||
|  |                 goto end; | ||||||
|             break; |             break; | ||||||
|         case OPT_GENSTR: |         case OPT_GENSTR: | ||||||
|             genstr = opt_arg(); |             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 |             if (rr_from == NULL | ||||||
|                 && (rr_from = sk_OPENSSL_STRING_new_null()) == NULL) |                 && (rr_from = sk_OPENSSL_STRING_new_null()) == NULL) | ||||||
|                 goto end; |                 goto end; | ||||||
|             sk_OPENSSL_STRING_push(rr_from, opt_arg()); |             if (sk_OPENSSL_STRING_push(rr_from, opt_arg()) <= 0) | ||||||
|  |                 goto end; | ||||||
|             break; |             break; | ||||||
|         case OPT_RR_TO: |         case OPT_RR_TO: | ||||||
|             if (rr_to == NULL |             if (rr_to == NULL | ||||||
|                 && (rr_to = sk_OPENSSL_STRING_new_null()) == NULL) |                 && (rr_to = sk_OPENSSL_STRING_new_null()) == NULL) | ||||||
|                 goto end; |                 goto end; | ||||||
|             sk_OPENSSL_STRING_push(rr_to, opt_arg()); |             if (sk_OPENSSL_STRING_push(rr_to, opt_arg()) <= 0) | ||||||
|  |                 goto end; | ||||||
|             break; |             break; | ||||||
|         case OPT_PRINT: |         case OPT_PRINT: | ||||||
|             noout = print = 1; |             noout = print = 1; | ||||||
|  | @ -588,13 +590,15 @@ int cms_main(int argc, char **argv) | ||||||
|                 if (sksigners == NULL |                 if (sksigners == NULL | ||||||
|                     && (sksigners = sk_OPENSSL_STRING_new_null()) == NULL) |                     && (sksigners = sk_OPENSSL_STRING_new_null()) == NULL) | ||||||
|                     goto end; |                     goto end; | ||||||
|                 sk_OPENSSL_STRING_push(sksigners, signerfile); |                 if (sk_OPENSSL_STRING_push(sksigners, signerfile) <= 0) | ||||||
|  |                     goto end; | ||||||
|                 if (keyfile == NULL) |                 if (keyfile == NULL) | ||||||
|                     keyfile = signerfile; |                     keyfile = signerfile; | ||||||
|                 if (skkeys == NULL |                 if (skkeys == NULL | ||||||
|                     && (skkeys = sk_OPENSSL_STRING_new_null()) == NULL) |                     && (skkeys = sk_OPENSSL_STRING_new_null()) == NULL) | ||||||
|                     goto end; |                     goto end; | ||||||
|                 sk_OPENSSL_STRING_push(skkeys, keyfile); |                 if (sk_OPENSSL_STRING_push(skkeys, keyfile) <= 0) | ||||||
|  |                     goto end; | ||||||
|                 keyfile = NULL; |                 keyfile = NULL; | ||||||
|             } |             } | ||||||
|             signerfile = opt_arg(); |             signerfile = opt_arg(); | ||||||
|  | @ -612,12 +616,14 @@ int cms_main(int argc, char **argv) | ||||||
|                 if (sksigners == NULL |                 if (sksigners == NULL | ||||||
|                     && (sksigners = sk_OPENSSL_STRING_new_null()) == NULL) |                     && (sksigners = sk_OPENSSL_STRING_new_null()) == NULL) | ||||||
|                     goto end; |                     goto end; | ||||||
|                 sk_OPENSSL_STRING_push(sksigners, signerfile); |                 if (sk_OPENSSL_STRING_push(sksigners, signerfile) <= 0) | ||||||
|  |                     goto end; | ||||||
|                 signerfile = NULL; |                 signerfile = NULL; | ||||||
|                 if (skkeys == NULL |                 if (skkeys == NULL | ||||||
|                     && (skkeys = sk_OPENSSL_STRING_new_null()) == NULL) |                     && (skkeys = sk_OPENSSL_STRING_new_null()) == NULL) | ||||||
|                     goto end; |                     goto end; | ||||||
|                 sk_OPENSSL_STRING_push(skkeys, keyfile); |                 if (sk_OPENSSL_STRING_push(skkeys, keyfile) <= 0) | ||||||
|  |                     goto end; | ||||||
|             } |             } | ||||||
|             keyfile = opt_arg(); |             keyfile = opt_arg(); | ||||||
|             break; |             break; | ||||||
|  | @ -671,7 +677,8 @@ int cms_main(int argc, char **argv) | ||||||
|                     key_param->next = nparam; |                     key_param->next = nparam; | ||||||
|                 key_param = 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; |             break; | ||||||
|         case OPT_V_CASES: |         case OPT_V_CASES: | ||||||
|             if (!opt_verify(o, vpm)) |             if (!opt_verify(o, vpm)) | ||||||
|  | @ -758,12 +765,14 @@ int cms_main(int argc, char **argv) | ||||||
|             if (sksigners == NULL |             if (sksigners == NULL | ||||||
|                 && (sksigners = sk_OPENSSL_STRING_new_null()) == NULL) |                 && (sksigners = sk_OPENSSL_STRING_new_null()) == NULL) | ||||||
|                 goto end; |                 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) |             if (skkeys == NULL && (skkeys = sk_OPENSSL_STRING_new_null()) == NULL) | ||||||
|                 goto end; |                 goto end; | ||||||
|             if (keyfile == NULL) |             if (keyfile == NULL) | ||||||
|                 keyfile = signerfile; |                 keyfile = signerfile; | ||||||
|             sk_OPENSSL_STRING_push(skkeys, keyfile); |             if (sk_OPENSSL_STRING_push(skkeys, keyfile) <= 0) | ||||||
|  |                 goto end; | ||||||
|         } |         } | ||||||
|         if (sksigners == NULL) { |         if (sksigners == NULL) { | ||||||
|             BIO_printf(bio_err, "No signer certificate specified\n"); |             BIO_printf(bio_err, "No signer certificate specified\n"); | ||||||
|  |  | ||||||
|  | @ -352,10 +352,12 @@ int engine_main(int argc, char **argv) | ||||||
|             test_avail++; |             test_avail++; | ||||||
|             break; |             break; | ||||||
|         case OPT_PRE: |         case OPT_PRE: | ||||||
|             sk_OPENSSL_STRING_push(pre_cmds, opt_arg()); |             if (sk_OPENSSL_STRING_push(pre_cmds, opt_arg()) <= 0) | ||||||
|  |                 goto end; | ||||||
|             break; |             break; | ||||||
|         case OPT_POST: |         case OPT_POST: | ||||||
|             sk_OPENSSL_STRING_push(post_cmds, opt_arg()); |             if (sk_OPENSSL_STRING_push(post_cmds, opt_arg()) <= 0) | ||||||
|  |                 goto end; | ||||||
|             break; |             break; | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | @ -328,7 +328,8 @@ int pkcs12_main(int argc, char **argv) | ||||||
|             if (canames == NULL |             if (canames == NULL | ||||||
|                 && (canames = sk_OPENSSL_STRING_new_null()) == NULL) |                 && (canames = sk_OPENSSL_STRING_new_null()) == NULL) | ||||||
|                 goto end; |                 goto end; | ||||||
|             sk_OPENSSL_STRING_push(canames, opt_arg()); |             if (sk_OPENSSL_STRING_push(canames, opt_arg()) <= 0) | ||||||
|  |                 goto end; | ||||||
|             break; |             break; | ||||||
|         case OPT_IN: |         case OPT_IN: | ||||||
|             infile = opt_arg(); |             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 |                 if (sksigners == NULL | ||||||
|                     && (sksigners = sk_OPENSSL_STRING_new_null()) == NULL) |                     && (sksigners = sk_OPENSSL_STRING_new_null()) == NULL) | ||||||
|                     goto end; |                     goto end; | ||||||
|                 sk_OPENSSL_STRING_push(sksigners, signerfile); |                 if (sk_OPENSSL_STRING_push(sksigners, signerfile) <= 0) | ||||||
|  |                     goto end; | ||||||
|                 if (keyfile == NULL) |                 if (keyfile == NULL) | ||||||
|                     keyfile = signerfile; |                     keyfile = signerfile; | ||||||
|                 if (skkeys == NULL |                 if (skkeys == NULL | ||||||
|                     && (skkeys = sk_OPENSSL_STRING_new_null()) == NULL) |                     && (skkeys = sk_OPENSSL_STRING_new_null()) == NULL) | ||||||
|                     goto end; |                     goto end; | ||||||
|                 sk_OPENSSL_STRING_push(skkeys, keyfile); |                 if (sk_OPENSSL_STRING_push(skkeys, keyfile) <= 0) | ||||||
|  |                     goto end; | ||||||
|                 keyfile = NULL; |                 keyfile = NULL; | ||||||
|             } |             } | ||||||
|             signerfile = opt_arg(); |             signerfile = opt_arg(); | ||||||
|  | @ -346,12 +348,14 @@ int smime_main(int argc, char **argv) | ||||||
|                 if (sksigners == NULL |                 if (sksigners == NULL | ||||||
|                     && (sksigners = sk_OPENSSL_STRING_new_null()) == NULL) |                     && (sksigners = sk_OPENSSL_STRING_new_null()) == NULL) | ||||||
|                     goto end; |                     goto end; | ||||||
|                 sk_OPENSSL_STRING_push(sksigners, signerfile); |                 if (sk_OPENSSL_STRING_push(sksigners, signerfile) <= 0) | ||||||
|  |                     goto end; | ||||||
|                 signerfile = NULL; |                 signerfile = NULL; | ||||||
|                 if (skkeys == NULL |                 if (skkeys == NULL | ||||||
|                     && (skkeys = sk_OPENSSL_STRING_new_null()) == NULL) |                     && (skkeys = sk_OPENSSL_STRING_new_null()) == NULL) | ||||||
|                     goto end; |                     goto end; | ||||||
|                 sk_OPENSSL_STRING_push(skkeys, keyfile); |                 if (sk_OPENSSL_STRING_push(skkeys, keyfile) <= 0) | ||||||
|  |                     goto end; | ||||||
|             } |             } | ||||||
|             keyfile = opt_arg(); |             keyfile = opt_arg(); | ||||||
|             break; |             break; | ||||||
|  | @ -424,12 +428,14 @@ int smime_main(int argc, char **argv) | ||||||
|             if (sksigners == NULL |             if (sksigners == NULL | ||||||
|                 && (sksigners = sk_OPENSSL_STRING_new_null()) == NULL) |                 && (sksigners = sk_OPENSSL_STRING_new_null()) == NULL) | ||||||
|                 goto end; |                 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) |             if (!skkeys && (skkeys = sk_OPENSSL_STRING_new_null()) == NULL) | ||||||
|                 goto end; |                 goto end; | ||||||
|             if (!keyfile) |             if (!keyfile) | ||||||
|                 keyfile = signerfile; |                 keyfile = signerfile; | ||||||
|             sk_OPENSSL_STRING_push(skkeys, keyfile); |             if (sk_OPENSSL_STRING_push(skkeys, keyfile) <= 0) | ||||||
|  |                 goto end; | ||||||
|         } |         } | ||||||
|         if (sksigners == NULL) { |         if (sksigners == NULL) { | ||||||
|             BIO_printf(bio_err, "No signer certificate specified\n"); |             BIO_printf(bio_err, "No signer certificate specified\n"); | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue