git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[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
Previous: Karthik NayakNext: Junio C Hamano
Message 2 of 22 in “ref-filter: small cleanups and fixes”
  1. 0/5 ref-filter: small cleanups and fixesKarthik Nayak, Jul 24, 2025
  2. 1/5 ref-cache: use 'size_t' instead of int for lengthKarthik Nayak, Jul 24, 2025
  3. Junio C HamanoJul 24, 2025
  4. 2/5 for-each-ref: fix documentation argument orderingKarthik Nayak, Jul 24, 2025
  5. Junio C HamanoJul 24, 2025
  6. Karthik NayakJul 24, 2025
  7. Junio C HamanoJul 24, 2025
  8. Karthik NayakJul 28, 2025
  9. Patrick SteinhardtJul 25, 2025
  10. Karthik NayakJul 28, 2025
  11. 3/5 for-each-ref: reword the documentation for '--start-after'Karthik Nayak, Jul 24, 2025
  12. Patrick SteinhardtJul 25, 2025
  13. 4/5 t6302: add test combining '--start-after' with '--exclude'Karthik Nayak, Jul 24, 2025
  14. 5/5 ref-filter: use REF_ITERATOR_SEEK_SET_PREFIX instead of '1'Karthik Nayak, Jul 24, 2025
  15. Junio C HamanoJul 24, 2025
  16. 0/5 ref-filter: small cleanups and fixesKarthik Nayak, Jul 28, 2025
  17. 1/5 ref-cache: use 'size_t' instead of int for lengthKarthik Nayak, Jul 28, 2025
  18. 2/5 for-each-ref: fix documentation argument orderingKarthik Nayak, Jul 28, 2025
  19. 3/5 for-each-ref: reword the documentation for '--start-after'Karthik Nayak, Jul 28, 2025
  20. 4/5 t6302: add test combining '--start-after' with '--exclude'Karthik Nayak, Jul 28, 2025
  21. 5/5 ref-filter: use REF_ITERATOR_SEEK_SET_PREFIX instead of '1'Karthik Nayak, Jul 28, 2025
  22. Patrick SteinhardtJul 29, 2025

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.