]> git.ipfire.org Git - thirdparty/git.git/commit
diff-files: move misplaced cleanup label
authorJeff King <peff@peff.net>
Tue, 12 Jul 2022 07:03:45 +0000 (03:03 -0400)
committerJunio C Hamano <gitster@pobox.com>
Tue, 12 Jul 2022 14:17:28 +0000 (07:17 -0700)
commit04393ae7f7951ba8af982cd1943c4dfb3102f6ed
treebb2bf8e3bae08577293d26dbd9d7ad65b4972914
parent54c8a7c379fc37a847b8a5ec5c419eae171322e1
diff-files: move misplaced cleanup label

Commit 0139c58ab9 (revisions API users: add "goto cleanup" for
release_revisions(), 2022-04-13) converted an early return in
cmd_diff_files() into a goto. But it put the cleanup label too early: if
read_cache_preload() returns an error, we'll set result to "-1", but
then jump to calling run_diff_files(), overwriting our result.

We should jump past the call to run_diff_files(). Likewise, we should go
past diff_result_code(), which is expecting to see a code from an actual
diff, not a negative error code.

In practice, I suspect this bug cannot actually be triggered, because
read_cache_preload() does not seem to ever return an error. Its return
value (eventually) comes from do_read_index(), which gives the number of
cache entries found, and calls die() on error. Still, it makes sense to
fix the inadvertent change from 0139c58ab9 first, and we can look into
the overall error handling of read_cache() separately (which is present
in many other callsites).

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/diff-files.c