Thread (55 messages) flat view 55 messages, 4 authors, 27d ago
COLD27d

Revision v3 of 3 in this series.

Revisions (3)
  1. v1 [diff vs current]
  2. v2 [diff vs current]
  3. v3 current

[PATCH v3 00/13] Next size_t stop: pack-objects/delta

From: Johannes Schindelin via GitGitGadget <hidden>
Date: 2026-08-13 14:55:55

This patch series continues the effort to stop using unsigned long where
size_t should have been used in the first place. This makes a difference on
64-bit Windows, where unsigned long is 32-bit.

With these fixes, the pack-objects machinery works as intended on 64-bit
Windows (and any other 64-bit platform where unsigned long isn't 64-bit).

Changes since v2:

 * Now zlib_cap_buf() is also widened in this patch series (I had left this
   for a later one, originally).
 * The unpack_object_header_buffer() function is now also widened in this
   here patch series.

Changes since v1:

 * The return value of sizeof_delta_index() is now included in the unsigned
   long -> size_t work.
 * To assign correct values to the now-widened max_delta_cache_size, a new
   pair of helpers are introduced and used: git_parse_size_t() and
   git_config_size_t()
 * There are now two references regarding the provenance of the
   deflateBound() formula in the corresponding commit message.

Johannes Schindelin (13):
  diff-delta: widen `struct delta_index`' size fields to `size_t`
  delta: widen `create_delta_index()` parameter to `size_t`
  pack-objects: widen delta-cache accounting to `size_t`
  pack-objects: widen `free_unpacked()` return to `size_t`
  pack-objects: widen `mem_usage` and `try_delta()`'s out-param to
    `size_t`
  delta: widen `create_delta()` and `diff_delta()` to `size_t`
  packfile, git-zlib: widen `use_pack()` and zstream avail fields to
    `size_t`
  archive-zip: widen `zlib_deflate_raw()`'s maxsize local to `size_t`
  diff: widen `deflate_it()`'s bound local from int to `size_t`
  http-push: widen `start_put()`'s size local from `ssize_t` to `size_t`
  t/helper/test-pack-deltas: widen `do_compress()`'s maxsize local to
    `size_t`
  git-zlib: widen `git_deflate_bound()` to `size_t`
  packfile: widen `unpack_object_header_buffer()` to `size_t`

 archive-zip.c                |  2 +-
 builtin/fast-import.c        |  6 ++++--
 builtin/pack-objects.c       | 32 ++++++++++++++++----------------
 config.c                     |  9 +++++++++
 config.h                     |  3 +++
 delta.h                      | 14 +++++++-------
 diff-delta.c                 | 14 +++++++-------
 diff.c                       |  6 ++++--
 git-zlib.c                   | 18 +++++++++++++++---
 git-zlib.h                   |  6 +++---
 http-push.c                  |  2 +-
 oss-fuzz/fuzz-pack-headers.c |  2 +-
 pack-check.c                 |  4 ++--
 packfile.c                   | 12 +++++-------
 packfile.h                   |  6 ++++--
 parse.c                      |  9 +++++++++
 parse.h                      |  1 +
 t/helper/test-delta.c        |  2 +-
 t/helper/test-pack-deltas.c  |  7 ++++---
 19 files changed, 97 insertions(+), 58 deletions(-)


base-commit: f85a7e662054a7b0d9070e432508831afa214b47
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-2175%2Fdscho%2Fsize-t%2Fpack-objects-delta-v3
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-2175/dscho/size-t/pack-objects-delta-v3
Pull-Request: https://github.com/gitgitgadget/git/pull/2175

Range-diff vs v2:

  1:  0012c1007b =  1:  0012c1007b diff-delta: widen `struct delta_index`' size fields to `size_t`
  2:  75500c5abb =  2:  75500c5abb delta: widen `create_delta_index()` parameter to `size_t`
  3:  5b54041baf =  3:  5b54041baf pack-objects: widen delta-cache accounting to `size_t`
  4:  9850de1a91 =  4:  9850de1a91 pack-objects: widen `free_unpacked()` return to `size_t`
  5:  c301958284 =  5:  c301958284 pack-objects: widen `mem_usage` and `try_delta()`'s out-param to `size_t`
  6:  cfbf6c9567 =  6:  cfbf6c9567 delta: widen `create_delta()` and `diff_delta()` to `size_t`
  7:  ca928b4579 !  7:  e4528f9034 packfile, git-zlib: widen `use_pack()` and zstream avail fields to `size_t`
     @@ builtin/pack-objects.c: size_t oe_get_size_slow(struct packing_data *pack,
       	if (e->type_ != OBJ_OFS_DELTA && e->type_ != OBJ_REF_DELTA) {
       		size_t sz;
      
     + ## git-zlib.c ##
     +@@ git-zlib.c: static const char *zerr_to_string(int status)
     + 
     + /* uLong is 32-bit on Windows, even on 64-bit systems */
     + #define ULONG_MAX_VALUE maximum_unsigned_value_of_type(uLong)
     +-static inline uInt zlib_buf_cap(unsigned long len)
     ++static inline uInt zlib_buf_cap(size_t len)
     + {
     + 	return (ZLIB_BUF_MAX < len) ? ZLIB_BUF_MAX : len;
     + }
     +
       ## git-zlib.h ##
      @@
       
  8:  9f379ee7aa =  8:  4521a41ff6 archive-zip: widen `zlib_deflate_raw()`'s maxsize local to `size_t`
  9:  ff103a0ee1 =  9:  f0765f6ed6 diff: widen `deflate_it()`'s bound local from int to `size_t`
 10:  c701d2f9b2 = 10:  c91b4d7a7e http-push: widen `start_put()`'s size local from `ssize_t` to `size_t`
 11:  e6175d2d87 = 11:  f4f2fa75f4 t/helper/test-pack-deltas: widen `do_compress()`'s maxsize local to `size_t`
 12:  762e716afe = 12:  b4004b1067 git-zlib: widen `git_deflate_bound()` to `size_t`
  -:  ---------- > 13:  bc4a58336a packfile: widen `unpack_object_header_buffer()` to `size_t`

-- 
gitgitgadget
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help