From: Jeff King Date: Tue, 25 Feb 2025 06:33:51 +0000 (-0500) Subject: unpack_loose_rest(): simplify error handling X-Git-Tag: v2.50.0-rc0~127^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=547f719d9b022e87eb8cf3cb7a7632822b996e29;p=thirdparty%2Fgit.git unpack_loose_rest(): simplify error handling Inflating a loose object is considered successful only if we got Z_STREAM_END and there were no more bytes. We check both of those conditions and return success, but then have to check them a second time to decide which error message to produce. I.e., we do something like this: if (!error_1 && !error_2) ...return success... if (error_1) ...handle error1... else if (error_2) ...handle error2... ...common error handling... This repetition was the source of a small bug fixed in an earlier commit (our Z_STREAM_END check was not the same in the two conditionals). Instead we can chain them all into a single if/else cascade, which avoids repeating ourselves: if (error_1) ...handle error1... else if (error_2) ...handle error2.... else ...return success... ...common error handling... Signed-off-by: Jeff King Signed-off-by: Junio C Hamano --- diff --git a/object-file.c b/object-file.c index f9713e4e8b..9f6e8504fb 100644 --- a/object-file.c +++ b/object-file.c @@ -1347,15 +1347,15 @@ static void *unpack_loose_rest(git_zstream *stream, obj_read_lock(); } } - if (status == Z_STREAM_END && !stream->avail_in) { - return buf; - } if (status != Z_STREAM_END) error(_("corrupt loose object '%s'"), oid_to_hex(oid)); else if (stream->avail_in) error(_("garbage at end of loose object '%s'"), oid_to_hex(oid)); + else + return buf; + free(buf); return NULL; }