Thread (3 messages) flat view 3 messages, 3 authors, 2017-02-25

Re: fatal error when diffing changed symlinks

From: Johannes Schindelin <hidden>
Date: 2017-02-25 12:38:11

Hi Peff & Junio,

On Fri, 24 Feb 2017, Jeff King wrote:
On Fri, Feb 24, 2017 at 11:51:22AM -0800, Junio C Hamano wrote:
quoted
quoted
A slightly worse is that the upcoming Git will ship with a rewritten
"difftool" that makes the above sequence segfault.
The culprit seems to be these lines in run_dir_diff():

		if (S_ISLNK(lmode)) {
			char *content = read_sha1_file(loid.hash, &type, &size);
			add_left_or_right(&symlinks2, src_path, content, 0);
			free(content);
		}

		if (S_ISLNK(rmode)) {
			char *content = read_sha1_file(roid.hash, &type, &size);
			add_left_or_right(&symlinks2, dst_path, content, 1);
			free(content);
		}

When viewing a working tree file, oid.hash could be 0{40} and
read_sha1_file() is not the right function to use to obtain the
contents.

Both of these two need to pay attention to 0{40}, I think, as the
user may be running "difftool -R --dir-diff" in which case the
working tree would appear in the left hand side instead.
As a side note, I think even outside of 0{40}, this should be checking
the return value of read_sha1_file(). A corrupted repo should die(), not
segfault.
I agree. I am on it.

Ciao,
Dscho
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help