Re: [BUG] git cat-file does not terminate

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Jeff King <peff@xxxxxxxx> writes:

> It would probably look like the patch below, though it really feels like
> the right solution is to fix the cygwin bug.

Thanks for a quick analysis and fix, folks.

We would need to assume certain things that the platform would give its
users are reliable, and system calls are fundamental part; otherwise we
would end up tying our hands behind our back saying "we cannot use this
and that as these are unreliable in certain places" and litter our
codebase with full of ifdefs and workarounds.

If this were merely of a breakage in a test release or a nightly build, I
would be happier to see us ignore this, but the problematic one is widely
in the wild, a workaround would be necessary, and more importantly, if it
is harder for a casual end-user to tell if the platform is affected (I am
assuming that most releases of Cygwin is without this bug, and most users
who build git themselves wouldn't bother reading README or Makefile even
if we said a MAX_WRITE_SIZE definition is necessary only for this and that
version), I would rather see a change that covers the problem a bit more
widely than necessary.

How prevalent is the problematic cygwin1.dll 1.7.8?  Also for how long did
this bug exist, in other words, if we were to make a table of problematic
versions, would we have only just a handful entries in it?  Also can we at
runtime find out what version we are running?

The reason I am asking these questions is because I think, assuming that
this would affect many unsuspecting Cygwin users, the best fix would be to
add a hook in the compat/ layer that decides if MAX_WRITE_SIZE workaround
is necessary at runtime, and do something like this:

	ssize_t xwrite(int fd, const void *buf, size_t len)
        {
        	ssize_t nr;
                static size_t max_write_size = platform_max_write_size();

                if (max_write_size && max_write_size < len)
                	len = max_write_size;
		...
	}

And then we would have in git-compat-util.h something like:

	#define platform_max_write_size() 0

on sane platforms, so that the fix will be optimized away by the compiler.

By the way, does the same version of Cygwin have similar issue on the read
side?
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]