maintenance --unregister: fix uninit'd data use & -Wdeclaration-after-statement
Since (maintenance: add option to register in a specific config, 2022-11-09) we've been unable to build with "DEVELOPER=1" without "DEVOPTS=no-error", as the added code triggers a "-Wdeclaration-after-statement" warning. And worse than that, the data handed to git_configset_clear() is uninitialized, as can be spotted with e.g.: ./t7900-maintenance.sh -vixd --run=23 --valgrind [...] + git maintenance unregister --force Conditional jump or move depends on uninitialised value(s) at 0x6B5F1E: git_configset_clear (config.c:2367) by 0x4BA64E: maintenance_unregister (gc.c:1619) by 0x4BD278: cmd_maintenance (gc.c:2650) by 0x409905: run_builtin (git.c:466) by 0x40A21C: handle_builtin (git.c:721) by 0x40A58E: run_argv (git.c:788) by 0x40AF68: cmd_main (git.c:926) by 0x5D39FE: main (common-main.c:57) Uninitialised value was created by a stack allocation at 0x4BA22C: maintenance_unregister (gc.c:1557) Let's fix both of these issues, and also move the scope of the variable to the "if" statement it's used in, to make it obvious where it's used. Helped-by: Johannes Schindelin <Johannes.Schindelin@gmx.de> Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com> Signed-off-by: Taylor Blau <me@ttaylorr.com>
This commit is contained in:
		 Ævar Arnfjörð Bjarmason
					Ævar Arnfjörð Bjarmason
				
			
				
					committed by
					
						 Taylor Blau
						Taylor Blau
					
				
			
			
				
	
			
			
			 Taylor Blau
						Taylor Blau
					
				
			
						parent
						
							1f80129d61
						
					
				
				
					commit
					be0fd57228
				
			| @ -1550,11 +1550,13 @@ static int maintenance_unregister(int argc, const char **argv, const char *prefi | |||||||
| 		usage_with_options(builtin_maintenance_unregister_usage, | 		usage_with_options(builtin_maintenance_unregister_usage, | ||||||
| 				   options); | 				   options); | ||||||
|  |  | ||||||
| 	struct config_set cs; |  | ||||||
| 	if (config_file) { | 	if (config_file) { | ||||||
|  | 		struct config_set cs; | ||||||
|  |  | ||||||
| 		git_configset_init(&cs); | 		git_configset_init(&cs); | ||||||
| 		git_configset_add_file(&cs, config_file); | 		git_configset_add_file(&cs, config_file); | ||||||
| 		list = git_configset_get_value_multi(&cs, key); | 		list = git_configset_get_value_multi(&cs, key); | ||||||
|  | 		git_configset_clear(&cs); | ||||||
| 	} else { | 	} else { | ||||||
| 		list = git_config_get_value_multi(key); | 		list = git_config_get_value_multi(key); | ||||||
| 	} | 	} | ||||||
| @ -1590,7 +1592,6 @@ static int maintenance_unregister(int argc, const char **argv, const char *prefi | |||||||
| 		die(_("repository '%s' is not registered"), maintpath); | 		die(_("repository '%s' is not registered"), maintpath); | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	git_configset_clear(&cs); |  | ||||||
| 	free(maintpath); | 	free(maintpath); | ||||||
| 	return 0; | 	return 0; | ||||||
| } | } | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user