From: "Johannes Schindelin via GitGitGadget" <gitgitgadget@gmail.com>
To: git@vger.kernel.org
Cc: Patrick Steinhardt <ps@pks.im>, Jeff King <peff@peff.net>,
Johannes Schindelin <johannes.schindelin@gmx.de>
Subject: [PATCH v3 00/12] coverity: fix unchecked returns
Date: Wed, 12 Aug 2026 08:03:08 +0000 [thread overview]
Message-ID: <pull.2179.v3.git.1786521801.gitgitgadget@gmail.com> (raw)
In-Reply-To: <pull.2179.git.1784069325.gitgitgadget@gmail.com>
This is the next batch of fixes in response to issues reported by Coverity.
Changes since v2:
* Added a new commit to handle block-writer initialization errors (instead
of ignoring them).
* The bw->zstream attribute is now also deinitialized in the error case, as
suggested by Junio.
* The commit message of "reftable/block: check deflateInit() return value"
was rephrased to stop suggesting that silent corruption by zlib would be
possible before that patch: This turned out to be provably incorrect.
* When aborting the bisect because dup2() failed, a left-over saved_stdout
is now also cleaned up.
Changes since v1:
* The last-modified patch is now more careful to clean up a commit slab
when parsing the commit failed.
* When the "good" bisect term was read successfully, but not the "bad" one,
the "good" one is now cleaned up.
* Instead of detecting failed get_terms() calls indirectly, the return
value is now checked.
* Failures when bisect_run() calls dup2() are now handled properly, too.
Johannes Schindelin (12):
http: die on curl_easy_duphandle failure in get_active_slot
config: propagate launch_editor() failure in show_editor()
reftable: handle block-writer initialization errors
reftable/block: check deflateInit() return value
reftable tests: check reftable_table_init_ref_iterator() return
last-modified: handle repo_parse_commit() failures
compat/pread: check initial lseek for errors
transport-helper: check dup() return in get_exporter
transport-helper: warn when export-marks file cannot be finalized
bisect: check strbuf_getline_lf return when reading terms
bisect: check get_terms return at all call sites
bisect: handle dup() failure when redirecting stdout
bisect.c | 6 +++--
builtin/bisect.c | 44 ++++++++++++++++++++++++---------
builtin/config.c | 5 +++-
builtin/last-modified.c | 9 ++++---
compat/pread.c | 2 ++
http.c | 2 ++
reftable/block.c | 5 +++-
reftable/writer.c | 8 +++++-
t/unit-tests/u-reftable-table.c | 6 +++--
transport-helper.c | 6 ++++-
10 files changed, 70 insertions(+), 23 deletions(-)
base-commit: 55526a18268bbc1ddaf8a6b7850c33d984eac9e9
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-2179%2Fdscho%2Fcoverity-fixes-unchecked-returns-v3
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-2179/dscho/coverity-fixes-unchecked-returns-v3
Pull-Request: https://github.com/gitgitgadget/git/pull/2179
Range-diff vs v2:
1: e653255de1 = 1: e653255de1 http: die on curl_easy_duphandle failure in get_active_slot
2: 0692704d45 = 2: 0692704d45 config: propagate launch_editor() failure in show_editor()
-: ---------- > 3: c689148aef reftable: handle block-writer initialization errors
3: 9bf7e737c7 ! 4: 66953a65d0 reftable/block: check deflateInit() return value
@@ Commit message
z_stream is left in an undefined state.
Subsequent deflate() calls in block_writer_finish() then operate
- on this uninitialized stream. Depending on the zlib
- implementation, this can produce silently corrupted compressed
- data (which would be written to the reftable file and discovered
- only when a later reader fails to inflate) or crash outright.
+ on this uninitialized stream. Current zlib/zlib-ng versions handle
+ such a stream gracefully, by returning `Z_STREAM_ERROR`, so in
+ practice it would likely not result in catastrophic error.
- The function already uses REFTABLE_ZLIB_ERROR for deflate()
- failures later in the code path (lines 171, 199), so returning
- the same error code for deflateInit() failure is consistent.
+ The function already uses REFTABLE_ZLIB_ERROR for deflate() failures
+ later in the code path, so returning the same error code for
+ deflateInit() failure is consistent.
Pointed out by Coverity.
Assisted-by: Claude Opus 4.6
+ Helped-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
## reftable/block.c ##
@@ reftable/block.c: int block_writer_init(struct block_writer *bw, uint8_t typ, ui
if (!bw->zstream)
return REFTABLE_OUT_OF_MEMORY_ERROR;
- deflateInit(bw->zstream, 9);
-+ if (deflateInit(bw->zstream, 9) != Z_OK)
++ if (deflateInit(bw->zstream, 9) != Z_OK) {
++ REFTABLE_FREE_AND_NULL(bw->zstream);
+ return REFTABLE_ZLIB_ERROR;
++ }
}
return 0;
4: 711671c3ab = 5: a49af20d30 reftable tests: check reftable_table_init_ref_iterator() return
5: 72a74c76be = 6: bf06239732 last-modified: handle repo_parse_commit() failures
6: f0b1e13979 = 7: 6e2295b8f0 compat/pread: check initial lseek for errors
7: 0facb9e8ca = 8: 689bb48fe5 transport-helper: check dup() return in get_exporter
8: 2b0e4f32fd = 9: ad6ea19737 transport-helper: warn when export-marks file cannot be finalized
9: 7f2b963103 = 10: 7db6ac2ab0 bisect: check strbuf_getline_lf return when reading terms
10: 9a9103096a = 11: aefdbe2bdf bisect: check get_terms return at all call sites
11: 829cd82177 ! 12: 258dbb0fbd bisect: handle dup() failure when redirecting stdout
@@ builtin/bisect.c: static int bisect_run(struct bisect_terms *terms, int argc, co
+ if (saved_stdout < 0 ||
+ dup2(temporary_stdout_fd, 1) < 0) {
+ res = error_errno(_("could not duplicate stdout"));
++ if (saved_stdout >= 0)
++ close(saved_stdout);
+ close(temporary_stdout_fd);
+ break;
+ }
--
gitgitgadget
next prev parent reply other threads:[~2026-08-12 8:03 UTC|newest]
Thread overview: 55+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-14 22:48 [PATCH 00/11] coverity: fix unchecked returns Johannes Schindelin via GitGitGadget
2026-07-14 22:48 ` [PATCH 01/11] http: die on curl_easy_duphandle failure in get_active_slot Johannes Schindelin via GitGitGadget
2026-07-14 22:48 ` [PATCH 02/11] config: propagate launch_editor() failure in show_editor() Johannes Schindelin via GitGitGadget
2026-07-15 6:58 ` Patrick Steinhardt
2026-07-14 22:48 ` [PATCH 03/11] reftable/block: check deflateInit() return value Johannes Schindelin via GitGitGadget
2026-07-14 22:48 ` [PATCH 04/11] reftable tests: check reftable_table_init_ref_iterator() return Johannes Schindelin via GitGitGadget
2026-07-14 22:48 ` [PATCH 05/11] last-modified: handle repo_parse_commit() failures Johannes Schindelin via GitGitGadget
2026-07-15 1:15 ` Junio C Hamano
2026-07-20 5:09 ` Junio C Hamano
2026-08-05 14:27 ` Johannes Schindelin
2026-07-14 22:48 ` [PATCH 06/11] compat/pread: check initial lseek for errors Johannes Schindelin via GitGitGadget
2026-07-15 6:58 ` Patrick Steinhardt
2026-08-05 14:29 ` Johannes Schindelin
2026-07-14 22:48 ` [PATCH 07/11] transport-helper: check dup() return in get_exporter Johannes Schindelin via GitGitGadget
2026-07-15 6:58 ` Patrick Steinhardt
2026-07-14 22:48 ` [PATCH 08/11] transport-helper: warn when export-marks file cannot be finalized Johannes Schindelin via GitGitGadget
2026-07-14 22:48 ` [PATCH 09/11] bisect: check strbuf_getline_lf return when reading terms Johannes Schindelin via GitGitGadget
2026-07-15 1:17 ` Junio C Hamano
2026-07-20 5:09 ` Junio C Hamano
2026-08-05 14:33 ` Johannes Schindelin
2026-07-14 22:48 ` [PATCH 10/11] bisect: check get_terms return at all call sites Johannes Schindelin via GitGitGadget
2026-07-15 6:58 ` Patrick Steinhardt
2026-08-05 14:57 ` Johannes Schindelin
2026-07-14 22:48 ` [PATCH 11/11] bisect: handle dup() failure when redirecting stdout Johannes Schindelin via GitGitGadget
2026-07-15 6:58 ` Patrick Steinhardt
2026-08-05 16:44 ` Johannes Schindelin
2026-08-05 18:30 ` [PATCH v2 00/11] coverity: fix unchecked returns Johannes Schindelin via GitGitGadget
2026-08-05 18:30 ` [PATCH v2 01/11] http: die on curl_easy_duphandle failure in get_active_slot Johannes Schindelin via GitGitGadget
2026-08-05 18:30 ` [PATCH v2 02/11] config: propagate launch_editor() failure in show_editor() Johannes Schindelin via GitGitGadget
2026-08-05 18:30 ` [PATCH v2 03/11] reftable/block: check deflateInit() return value Johannes Schindelin via GitGitGadget
2026-08-06 1:11 ` Junio C Hamano
2026-08-05 18:30 ` [PATCH v2 04/11] reftable tests: check reftable_table_init_ref_iterator() return Johannes Schindelin via GitGitGadget
2026-08-05 18:30 ` [PATCH v2 05/11] last-modified: handle repo_parse_commit() failures Johannes Schindelin via GitGitGadget
2026-08-05 18:30 ` [PATCH v2 06/11] compat/pread: check initial lseek for errors Johannes Schindelin via GitGitGadget
2026-08-05 18:30 ` [PATCH v2 07/11] transport-helper: check dup() return in get_exporter Johannes Schindelin via GitGitGadget
2026-08-05 18:30 ` [PATCH v2 08/11] transport-helper: warn when export-marks file cannot be finalized Johannes Schindelin via GitGitGadget
2026-08-05 18:30 ` [PATCH v2 09/11] bisect: check strbuf_getline_lf return when reading terms Johannes Schindelin via GitGitGadget
2026-08-05 18:30 ` [PATCH v2 10/11] bisect: check get_terms return at all call sites Johannes Schindelin via GitGitGadget
2026-08-05 20:26 ` Junio C Hamano
2026-08-05 18:31 ` [PATCH v2 11/11] bisect: handle dup() failure when redirecting stdout Johannes Schindelin via GitGitGadget
2026-08-06 15:41 ` Jeff King
2026-08-06 17:31 ` Junio C Hamano
2026-08-12 8:03 ` Johannes Schindelin via GitGitGadget [this message]
2026-08-12 8:03 ` [PATCH v3 01/12] http: die on curl_easy_duphandle failure in get_active_slot Johannes Schindelin via GitGitGadget
2026-08-12 8:03 ` [PATCH v3 02/12] config: propagate launch_editor() failure in show_editor() Johannes Schindelin via GitGitGadget
2026-08-12 8:03 ` [PATCH v3 03/12] reftable: handle block-writer initialization errors Johannes Schindelin via GitGitGadget
2026-08-12 8:03 ` [PATCH v3 04/12] reftable/block: check deflateInit() return value Johannes Schindelin via GitGitGadget
2026-08-12 8:03 ` [PATCH v3 05/12] reftable tests: check reftable_table_init_ref_iterator() return Johannes Schindelin via GitGitGadget
2026-08-12 8:03 ` [PATCH v3 06/12] last-modified: handle repo_parse_commit() failures Johannes Schindelin via GitGitGadget
2026-08-12 8:03 ` [PATCH v3 07/12] compat/pread: check initial lseek for errors Johannes Schindelin via GitGitGadget
2026-08-12 8:03 ` [PATCH v3 08/12] transport-helper: check dup() return in get_exporter Johannes Schindelin via GitGitGadget
2026-08-12 8:03 ` [PATCH v3 09/12] transport-helper: warn when export-marks file cannot be finalized Johannes Schindelin via GitGitGadget
2026-08-12 8:03 ` [PATCH v3 10/12] bisect: check strbuf_getline_lf return when reading terms Johannes Schindelin via GitGitGadget
2026-08-12 8:03 ` [PATCH v3 11/12] bisect: check get_terms return at all call sites Johannes Schindelin via GitGitGadget
2026-08-12 8:03 ` [PATCH v3 12/12] bisect: handle dup() failure when redirecting stdout Johannes Schindelin via GitGitGadget
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=pull.2179.v3.git.1786521801.gitgitgadget@gmail.com \
--to=gitgitgadget@gmail.com \
--cc=git@vger.kernel.org \
--cc=johannes.schindelin@gmx.de \
--cc=peff@peff.net \
--cc=ps@pks.im \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.