]> git.99rst.org Git - git.git/commit
check_stream_oid(): discard hash on read error
authorJeff King <redacted>
Thu, 2 Jul 2026 08:05:03 +0000 (04:05 -0400)
committerJunio C Hamano <redacted>
Thu, 2 Jul 2026 16:50:47 +0000 (09:50 -0700)
commit77f78b802559f19167a1d004d5566da9fbff9e85
tree462a845daf96c13502f7d597ac751319281668a1
parent64b69225620a4119e1ee6e02620c56a58dc442fb
check_stream_oid(): discard hash on read error

The happy path of check_stream_oid() is to initialize a hash, feed the
loose object zlib stream into it, and then get the final result. But if
we hit a zlib error or see extra cruft we'll bail early with an error.

Since we never call git_hash_final() in this cases, any resources held
by the git_hash_ctx may be leaked. Our default hash algorithms don't
allocate anything in the hash_ctx, but some implementations do. For
example, running:

  make SANITIZE=leak \
       OPENSSL_SHA256=1 \
       GIT_TEST_DEFAULT_HASH=sha256 \
       test

will fail t1450, since it feeds corrupted objects that cause us to bail
from check_stream_oid(). This patch fixes it by discarding the hash in
those early return paths. Trying to jump to a common "out:" label is not
worth it here, as we must _not_ discard a hash that was already fed to
git_hash_final(). And the hash_ctx itself does not carry any information
(so we cannot check for a NULL pointer, etc).

Signed-off-by: Jeff King <redacted>
Signed-off-by: Junio C Hamano <redacted>
object-file.c
git clone https://git.99rst.org/PROJECT