config: propagate launch_editor() failure in show_editor()

show_editor() calls launch_editor() to open the user's editor on the configuration file, but discards the return value and unconditionally returns 0 (success). When the editor fails to launch (e.g., $EDITOR is not found, or the editor exits with a nonzero status), the caller receives no indication that anything went wrong. This affects "git config edit" and "git config --edit": the command silently succeeds even when the editor could not be started. In contrast, other editor-launching paths in git (such as "git commit" and "git rebase --edit-todo") properly propagate editor failures and exit with an error. Check the return value and propagate the failure by returning -1. The two callers (cmd_config_edit at line 1315 and the legacy cmd_config at line 1478) both propagate this return to handle_builtin, which translates negative returns into an error exit. Pointed out by Coverity. Assisted-by: Claude Opus 4.6 Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Johannes Schindelin committed Jul 14, 2026 at 22:48 UTC 6e1e922eb82b583a34b6b20bd57e6df52ab651d6
1 file changed +4 -1
builtin/config.c
+4 -1
@@ -1313,7 +1313,10 @@ static int show_editor(struct config_location_options *opts)
1313 else if (errno != EEXIST)
1314 die_errno(_("cannot create configuration file %s"), config_file);
1315 }
1316 - launch_editor(config_file, NULL, NULL);
1316 + if (launch_editor(config_file, NULL, NULL)) {
1317 + free(config_file);
1318 + return -1;
1319 + }
1320 free(config_file);
1321
1322 return 0;