Subject: Re: [PATCH v2 1/4] apply: reject input that touches outside $cwd

From: Junio C Hamano <[email-masked]>
Date: Tue, 03 Feb 2015 13:40:12 -0800

Jeff King <[email-masked]> writes:

> But wouldn't we still fail writing "foo/bar" at that point if "foo" is a
> regular file (again, we should never do this, but that is the point of
> the test).

The point of the test is not to create foo, whether it is a symlink
or an emulating regular file, in the first place.

In this piece:

>> +test_expect_failure 'symlink escape via ..' '
>> +	{
>> +		mkpatch_symlink tmp .. &&

This is a patch to create "tmp" that points at ".."

>> +		mkpatch_add tmp/foo ../foo

And this is a patch to create "tmp/foo", and make sure ../foo does
not exist in the filesystem to prepare for the test.

>> +	} >patch &&
>> +	test_must_fail git apply patch &&

And this patch, if the rejection logic were to be broken in the
future, might create "tmp" and then try to follow it to affect
"../foo".

>> +	test_path_is_missing ../foo

So if this test makes sure if "tmp" is missing, then it would be
alright, no?  The "follow the symlink to affect ../foo" may not
happen on a filesystem without symlinks, but verifying that "tmp"
is missing will assure us that the patch application is atomic,
i.e. if we see "tmp" on the filesystem after seeing "git apply"
failed, that is a sign that "git apply" failed to be atomic.