Subject: Re: [PATCH 1/5] pack-objects: plug leak in `read_stdin_packs()`

From: Taylor Blau <[email-masked]>
Date: Wed, 25 Mar 2026 19:03:10 -0400

On Tue, Mar 24, 2026 at 08:39:17AM +0100, Patrick Steinhardt wrote:
> On Thu, Mar 19, 2026 at 06:24:15PM -0400, Taylor Blau wrote:
> > The `read_stdin_packs()` function added originally via 339bce27f4f
> > (builtin/pack-objects.c: add '--stdin-packs' option, 2021-02-22)
> > declares a `rev_info` struct but neglects to call `release_revisions()`
> > on it before returning, creating a leak.
> >
> > The related change in 97ec43247c0 (pack-objects: declare 'rev_info' for
> > '--stdin-packs' earlier, 2025-06-23) carried forward this oversight and
> > did not address it.
> >
> > Ensure that we call `release_revisions()` appropriately to prevent a
> > leak from this function.
>
> Would be curious to learn why none of our tests fail with this. The fix
> looks obviously correct though, and there are no other early exits that
> might need fixing here.

I believe it's because the only memory we allocate here is in
revs->pending, but we copy it to old_pending in prepare_revision_walk()
and all object_array_clear() on it.

Since our traversal doesn't use any other fields of rev_info that would
cause it to allocate memory, we don't see any leaks in our tests.

I'll rewords the commit message to clarify that this is preventing the
*potential* of a leak, not an actual leak.

Thanks,
Taylor