Jeff King 9929a67917 unpack_loose_rest(): avoid numeric comparison of zlib status
When unpacking the actual content of a loose object file, we insist both
that the status code we got is Z_STREAM_END, and that we consumed all
bytes.

If we didn't, we'll return an error, but the specific error message we
produce depends on which of the two error conditions we saw. So we'll
check both a second time to decide which error to produce. But this
second time, our status code check is loose: it checks for a negative
status value.

This can get confused by zlib codes which are not negative, such as
Z_NEED_DICT. In this case we'd erroneously print nothing at all, when we
should say "corrupt loose object".

Instead, this second check should check explicitly against Z_STREAM_END.

Note that Z_OK is "0", so the existing code also produced no message for
Z_OK. But it's impossible to see that status, since we only break out of
the inflate loop when we stop seeing Z_OK (so a stream which has more
bytes than its object header claims would eventually yield Z_BUF_ERROR).

There's no test here, as it would require a loose object whose zlib
stream returns Z_NEED_DICT in the middle of the object content. I think
that is probably possible, but even our Z_NEED_DICT test in t1006 does
not trigger this, because we hit that error while reading the header. I
found this bug while reviewing all callers of git_inflate() for bugs
similar to the one we saw in unpack_loose_header(). This was the only
other case that did a numeric comparison rather than explicitly checking
for Z_STREAM_END.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2025-02-25 10:24:55 -08:00
2024-11-26 22:14:59 +01:00
2024-11-26 22:14:59 +01:00
2024-02-14 15:36:06 -08:00
2024-11-26 22:15:00 +01:00
2023-12-14 14:38:07 -08:00
2023-11-26 10:07:05 +09:00
2024-02-18 21:03:43 +08:00
2023-11-26 10:07:06 +09:00
2023-11-26 10:10:48 +09:00
2024-01-18 11:53:17 -08:00
2023-12-26 12:04:32 -08:00
2023-12-26 12:04:32 -08:00
2023-11-26 10:10:48 +09:00
2024-01-23 10:40:10 -08:00
2023-11-26 10:10:48 +09:00
2024-11-26 22:14:59 +01:00
2024-11-26 22:14:58 +01:00
2024-01-08 14:05:15 -08:00
2024-02-15 15:14:48 -08:00
2024-04-19 12:38:54 +02:00
2024-04-19 12:38:50 +02:00
2024-04-19 12:38:50 +02:00
2023-11-26 10:07:05 +09:00
2024-11-26 22:15:00 +01:00
2023-11-26 10:10:48 +09:00
2023-11-26 10:07:05 +09:00
2024-04-19 12:38:50 +02:00
2023-12-26 12:04:32 -08:00
2024-04-19 12:38:50 +02:00
2023-11-26 10:07:05 +09:00
2023-11-26 10:07:05 +09:00
2023-11-26 10:07:05 +09:00
2023-11-26 10:07:05 +09:00
2023-12-14 14:38:08 -08:00
2024-04-19 12:38:54 +02:00
2024-04-19 12:38:46 +02:00
2023-11-26 10:07:05 +09:00
2024-04-19 12:38:54 +02:00
2024-01-08 14:05:15 -08:00
2024-11-26 22:15:00 +01:00
2024-04-19 12:38:54 +02:00
2024-01-08 14:05:15 -08:00
2024-04-19 12:38:54 +02:00
2024-04-19 12:38:54 +02:00
2024-04-19 12:38:54 +02:00
2023-11-26 10:07:05 +09:00
2023-12-27 14:52:24 -08:00
2024-11-26 22:14:59 +01:00
2024-11-26 22:14:59 +01:00
2024-04-19 12:38:50 +02:00
2024-04-19 12:38:37 +02:00
2023-11-26 10:07:05 +09:00
2023-11-26 10:07:05 +09:00
2023-11-26 10:07:05 +09:00

Build status

Git - fast, scalable, distributed revision control system

Git is a fast, scalable, distributed revision control system with an unusually rich command set that provides both high-level operations and full access to internals.

Git is an Open Source project covered by the GNU General Public License version 2 (some parts of it are under different licenses, compatible with the GPLv2). It was originally written by Linus Torvalds with help of a group of hackers around the net.

Please read the file INSTALL for installation instructions.

Many Git online resources are accessible from https://git-scm.com/ including full documentation and Git related tools.

See Documentation/gittutorial.txt to get started, then see Documentation/giteveryday.txt for a useful minimum set of commands, and Documentation/git-<commandname>.txt for documentation of each command. If git has been correctly installed, then the tutorial can also be read with man gittutorial or git help tutorial, and the documentation of each command with man git-<commandname> or git help <commandname>.

CVS users may also want to read Documentation/gitcvs-migration.txt (man gitcvs-migration or git help cvs-migration if git is installed).

The user discussion and development of Git take place on the Git mailing list -- everyone is welcome to post bug reports, feature requests, comments and patches to git@vger.kernel.org (read Documentation/SubmittingPatches for instructions on patch submission and Documentation/CodingGuidelines).

Those wishing to help with error message, usage and informational message string translations (localization l10) should see po/README.md (a po file is a Portable Object file that holds the translations).

To subscribe to the list, send an email to git+subscribe@vger.kernel.org (see https://subspace.kernel.org/subscribing.html for details). The mailing list archives are available at https://lore.kernel.org/git/, https://marc.info/?l=git and other archival sites.

Issues which are security relevant should be disclosed privately to the Git Security mailing list git-security@googlegroups.com.

The maintainer frequently sends the "What's cooking" reports that list the current status of various development topics to the mailing list. The discussion following them give a good reference for project status, development direction and remaining tasks.

The name "git" was given by Linus Torvalds when he wrote the very first version. He described the tool as "the stupid content tracker" and the name as (depending on your mood):

  • random three-letter combination that is pronounceable, and not actually used by any common UNIX command. The fact that it is a mispronunciation of "get" may or may not be relevant.
  • stupid. contemptible and despicable. simple. Take your pick from the dictionary of slang.
  • "global information tracker": you're in a good mood, and it actually works for you. Angels sing, and a light suddenly fills the room.
  • "goddamn idiotic truckload of sh*t": when it breaks
Description
A fork of Git containing Windows-specific patches.
Readme 514 MiB
2025-08-19 03:50:05 -05:00
Languages
C 50.2%
Shell 39.2%
Perl 4.3%
Tcl 3%
Python 0.8%
Other 2.2%