[PATCH 1/5] ref-cache: use 'size_t' instead of int for length
- From
Karthik Nayak <karthik.188@gmail.com>
- Date
- Jul 24, 2025, 08:14 UTC
- Message-ID
- <20250724-kn-small-cleanups-v1-1-0c70f591de3e@gmail.com>
- In-Reply-To
- <20250724-kn-small-cleanups-v1-0-0c70f591de3e@gmail.com>
The commit 090eb5336c (refs: selectively set prefix in the seek functions, 2025-07-15) modified the ref-cache iterator to support seeking to a specified marker without setting the prefix.
The commit adds and uses an integer 'len' to capture the length of the seek marker to compare with the entries of a given directory. Since the type of the variable is 'int', this is met with a typecast of converting a `strlen` to 'int' so it can be assigned to the 'len' variable.
This is whole operation is a bit wrong: 1. Since the 'len' variable is eventually used in a 'strncmp', it should have been of type 'size_t'. 2. This also truncates the value provided from 'strlen' to an int, which could cause a large refname to produce a negative number.
Let's do the correct thing here and simply use 'size_t' for `len`.
Signed-off-by: Karthik Nayak <karthik.188@gmail.com> --- refs/ref-cache.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/refs/ref-cache.c b/refs/ref-cache.c index 1d95b56d40..8df7ae43e5 100644 --- a/refs/ref-cache.c +++ b/refs/ref-cache.c @@ -498,13 +498,14 @@ static int cache_ref_iterator_seek(struct ref_iterator *ref_iterator, * indexing to each level as needed. */ do { - int len, idx; + int idx; + size_t len; int cmp = 0; sort_ref_dir(dir); slash = strchr(slash, '/'); - len = slash ? slash - refname : (int)strlen(refname); + len = slash ? (size_t)(slash - refname) : strlen(refname); for (idx = 0; idx < dir->nr; idx++) { cmp = strncmp(refname, dir->entries[idx]->name, len);
-- 2.49.0