]> git.ipfire.org Git - thirdparty/git.git/commitdiff
pack-objects: widen `mem_usage` and `try_delta()`'s out-param to `size_t`
authorJohannes Schindelin <johannes.schindelin@gmx.de>
Thu, 9 Jul 2026 16:49:32 +0000 (16:49 +0000)
committerJunio C Hamano <gitster@pobox.com>
Thu, 9 Jul 2026 21:55:23 +0000 (14:55 -0700)
The pair must move together because `find_deltas()` passes `&mem_usage`
to `try_delta()`: widening either alone breaks the type match.

`mem_usage` accumulates per-object byte counts already computed in
`size_t` (`SIZE()` and `sizeof_delta_index()` reach here through
`free_unpacked()`, now `size_t`), and was the last 32-bit-on-Windows
narrowing point in the delta-window memory accounting chain. With this
commit, that chain uses `size_t` consistently except for
`sizeof_delta_index()`'s still-narrow return, whose value is bounded by
`create_delta_index()`'s entries cap.

`window_memory_limit` (config-driven via `git_config_ulong()`) stays
`unsigned long`: it is only compared against `mem_usage` and promotes.

Assisted-by: Opus 4.7
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/pack-objects.c

index a44e61ab0f8be268276f0a19c3f747cb66f9b650..d0ccf8a62d4e5f6da58ef1295cfdec0330f33bcb 100644 (file)
@@ -2787,7 +2787,7 @@ size_t oe_get_size_slow(struct packing_data *pack,
 }
 
 static int try_delta(struct unpacked *trg, struct unpacked *src,
-                    unsigned max_depth, unsigned long *mem_usage)
+                    unsigned max_depth, size_t *mem_usage)
 {
        struct object_entry *trg_entry = trg->entry;
        struct object_entry *src_entry = src->entry;
@@ -2974,7 +2974,7 @@ static void find_deltas(struct object_entry **list, unsigned *list_size,
 {
        uint32_t i, idx = 0, count = 0;
        struct unpacked *array;
-       unsigned long mem_usage = 0;
+       size_t mem_usage = 0;
 
        CALLOC_ARRAY(array, window);