From: Jeff King <peff@peff.net>
To: Patrick Steinhardt <ps@pks.im>
Cc: git@vger.kernel.org, Phillip Wood <phillip.wood123@gmail.com>,
Junio C Hamano <gitster@pobox.com>,
Karthik Nayak <karthik.188@gmail.com>,
Toon Claes <toon@iotcl.com>
Subject: Re: [PATCH v2 01/16] object-file: fix -Wsign-compare warnings
Date: Sun, 5 Apr 2026 02:56:02 -0400 [thread overview]
Message-ID: <20260405065602.GA1481314@coredump.intra.peff.net> (raw)
In-Reply-To: <20250717-pks-object-file-wo-the-repository-v2-1-36d2cd6c700e@pks.im>
On Thu, Jul 17, 2025 at 06:56:27AM +0200, Patrick Steinhardt wrote:
> @@ -1268,7 +1265,7 @@ int index_fd(struct index_state *istate, struct object_id *oid,
> ret = index_stream_convert_blob(istate, oid, fd, path, flags);
> else if (!S_ISREG(st->st_mode))
> ret = index_pipe(istate, oid, fd, type, path, flags);
> - else if (st->st_size <= repo_settings_get_big_file_threshold(the_repository) ||
> + else if ((st->st_size >= 0 && (size_t) st->st_size <= repo_settings_get_big_file_threshold(the_repository)) ||
> type != OBJ_BLOB ||
> (path && would_convert_to_git(istate, path)))
> ret = index_core(istate, oid, fd, xsize_t(st->st_size),
This is an old thread, but I happened across this code while looking at
the function for something more recent. This cast seems quite
suspicious. What happens when st->st_size is larger than a size_t (e.g.,
a 4.1GB file on a 32-bit system)? We'll truncate and get a wrong answer.
I think this ought to be comparing in the off_t space instead. Which I
_think_ was happening before the cast due to C's integer promotion rules
(even though off_t is signed, because it's larger than size_t on a
32-bit system and can hold all of size_t's values, then size_t is
promoted).
It's sort of academic, since both sides of the conditional end up
calling xsize_t(), which will then bail. But it _could_ handle off_t
correctly in the "else" clause here, which tries to stream the content.
More interesting to me (and why I responded to this old patch series) is
that inserting a cast to silence -Wsign-compare actually broke the
comparison in this case.
-Peff
next prev parent reply other threads:[~2026-04-05 6:56 UTC|newest]
Thread overview: 60+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-07-09 11:17 [PATCH 00/19] object-file: get rid of `the_repository` Patrick Steinhardt
2025-07-09 11:17 ` [PATCH 01/19] object-file: fix -Wsign-compare warnings Patrick Steinhardt
2025-07-09 11:17 ` [PATCH 02/19] object-file: stop using `the_hash_algo` Patrick Steinhardt
2025-07-11 9:52 ` Karthik Nayak
2025-07-09 11:17 ` [PATCH 03/19] object-file: get rid of `the_repository` in `has_loose_object()` Patrick Steinhardt
2025-07-09 11:17 ` [PATCH 04/19] object-file: inline `check_and_freshen()` functions Patrick Steinhardt
2025-07-09 11:17 ` [PATCH 05/19] object-file: get rid of `the_repository` when freshening objects Patrick Steinhardt
2025-07-11 9:59 ` Karthik Nayak
2025-07-09 11:17 ` [PATCH 06/19] object-file: get rid of `the_repository` in `loose_object_info()` Patrick Steinhardt
2025-07-09 11:17 ` [PATCH 07/19] object-file: get rid of `the_repository` in `finalize_object_file()` Patrick Steinhardt
2025-07-09 11:17 ` [PATCH 08/19] loose: write loose objects map via their source Patrick Steinhardt
2025-07-11 10:25 ` Karthik Nayak
2025-07-15 10:50 ` Patrick Steinhardt
2025-07-09 11:17 ` [PATCH 09/19] odb: introduce `odb_write_object()` Patrick Steinhardt
2025-07-10 18:39 ` Toon Claes
2025-07-15 10:50 ` Patrick Steinhardt
2025-07-09 11:17 ` [PATCH 10/19] object-file: get rid of `the_repository` when writing objects Patrick Steinhardt
2025-07-09 11:17 ` [PATCH 11/19] object-file: inline `for_each_loose_file_in_objdir_buf()` Patrick Steinhardt
2025-07-09 11:17 ` [PATCH 12/19] object-file: remove declaration for `for_each_file_in_obj_subdir()` Patrick Steinhardt
2025-07-09 11:17 ` [PATCH 13/19] object-file: get rid of `the_repository` in loose object iterators Patrick Steinhardt
2025-07-10 18:41 ` Toon Claes
2025-07-09 11:17 ` [PATCH 14/19] object-file: get rid of `the_repository` in `read_loose_object()` Patrick Steinhardt
2025-07-09 11:17 ` [PATCH 15/19] object-file: get rid of `the_repository` in `force_object_loose()` Patrick Steinhardt
2025-07-10 18:42 ` Toon Claes
2025-07-11 10:38 ` Karthik Nayak
2025-07-15 10:50 ` Patrick Steinhardt
2025-07-15 11:36 ` Toon Claes
2025-07-09 11:17 ` [PATCH 16/19] object-file: get rid of `the_repository` in index-related functions Patrick Steinhardt
2025-07-09 11:17 ` [PATCH 17/19] environment: move compression level into repo settings Patrick Steinhardt
2025-07-09 15:26 ` Phillip Wood
2025-07-11 18:55 ` Junio C Hamano
2025-07-15 10:50 ` Patrick Steinhardt
2025-07-15 11:27 ` Patrick Steinhardt
2025-07-15 15:51 ` Phillip Wood
2025-07-15 16:12 ` Patrick Steinhardt
2025-07-16 12:56 ` Patrick Steinhardt
2025-07-17 15:19 ` Phillip Wood
2025-07-17 15:56 ` Junio C Hamano
2025-07-15 18:50 ` Junio C Hamano
2025-07-17 8:00 ` Ayush Chandekar
2025-07-09 11:17 ` [PATCH 18/19] environment: move object creation mode " Patrick Steinhardt
2025-07-09 11:17 ` [PATCH 19/19] object-file: drop USE_THE_REPOSITORY_VARIABLE Patrick Steinhardt
2025-07-17 4:56 ` [PATCH v2 00/16] object-file: get rid of `the_repository` Patrick Steinhardt
2025-07-17 4:56 ` [PATCH v2 01/16] object-file: fix -Wsign-compare warnings Patrick Steinhardt
2026-04-05 6:56 ` Jeff King [this message]
2025-07-17 4:56 ` [PATCH v2 02/16] object-file: stop using `the_hash_algo` Patrick Steinhardt
2025-07-17 4:56 ` [PATCH v2 03/16] object-file: get rid of `the_repository` in `has_loose_object()` Patrick Steinhardt
2025-07-17 4:56 ` [PATCH v2 04/16] object-file: inline `check_and_freshen()` functions Patrick Steinhardt
2025-07-17 4:56 ` [PATCH v2 05/16] object-file: get rid of `the_repository` when freshening objects Patrick Steinhardt
2025-07-17 4:56 ` [PATCH v2 06/16] object-file: get rid of `the_repository` in `loose_object_info()` Patrick Steinhardt
2025-07-17 4:56 ` [PATCH v2 07/16] object-file: get rid of `the_repository` in `finalize_object_file()` Patrick Steinhardt
2025-07-17 4:56 ` [PATCH v2 08/16] loose: write loose objects map via their source Patrick Steinhardt
2025-07-17 4:56 ` [PATCH v2 09/16] odb: introduce `odb_write_object()` Patrick Steinhardt
2025-07-17 4:56 ` [PATCH v2 10/16] object-file: get rid of `the_repository` when writing objects Patrick Steinhardt
2025-07-17 4:56 ` [PATCH v2 11/16] object-file: inline `for_each_loose_file_in_objdir_buf()` Patrick Steinhardt
2025-07-17 4:56 ` [PATCH v2 12/16] object-file: remove declaration for `for_each_file_in_obj_subdir()` Patrick Steinhardt
2025-07-17 4:56 ` [PATCH v2 13/16] object-file: get rid of `the_repository` in loose object iterators Patrick Steinhardt
2025-07-17 4:56 ` [PATCH v2 14/16] object-file: get rid of `the_repository` in `read_loose_object()` Patrick Steinhardt
2025-07-17 4:56 ` [PATCH v2 15/16] object-file: get rid of `the_repository` in `force_object_loose()` Patrick Steinhardt
2025-07-17 4:56 ` [PATCH v2 16/16] object-file: get rid of `the_repository` in index-related functions Patrick Steinhardt
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=20260405065602.GA1481314@coredump.intra.peff.net \
--to=peff@peff.net \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=karthik.188@gmail.com \
--cc=phillip.wood123@gmail.com \
--cc=ps@pks.im \
--cc=toon@iotcl.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox