Thread (1 message) 1 message, 1 author, 2016-06-15

Re: [PATCH v7 2/2] Verify index file before we opportunistically update it

From: Junio C Hamano <hidden>
Date: 2016-06-15 23:00:41

Duy Nguyen [off-list ref] writes:
On Fri, Apr 11, 2014 at 2:28 AM, Junio C Hamano [off-list ref] wrote:
quoted
Yiannis Marangos [off-list ref] writes:
quoted
+     n = xpread(fd, sha1, 20, st.st_size - 20);
+     if (n != 20)
+             goto out;
I think it is possible for pread(2) to give you a short-read.

The existing callers of emulated mmap and index-pack are prepared to
handle a short-read correctly, but I do not think this code does.

I'll queue this instead in the meantime.
There are two things to sort out (sorry I can't spend much time on it
right now): should the same sha1 test be done in write_index(), in
addition to update_index_if_able(). And what do we do about
istate->sha1[] in discard_index(), keep it or clear it.
Yeah, I was hoping that the real write codepath (as opposed to "this
is read only and we read the index without holding a lock---now we
noticed that the index needs refreshing, and we know how the
resulting refreshed index should look like, perhaps we can write it
to save cycles for other processes" codepath where we cannot and
should not take a lock early) would take the lock and then read, but
because that is not the way they work, the need the same protection,
I would think.  As discard_index() is not "we are removing all the
entries because the user told us to 'rm -r .'" but is "for the
purpose of our internal processing we do not need the old contents
of the index", my knee-jerk reaction is that we should not clear it.

Any operation that makes the resulting index empty (i.e. no path
being tracked) should still write an empty index (with the usual
header and the most importantly the trailing file checksum), but
that goes without saying.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help