From: Nicolas Pitre Date: Fri, 22 Oct 2010 04:02:27 +0000 (-0400) Subject: diff: don't presume empty file when corresponding object is missing X-Git-Tag: v1.7.3.4~24^2 X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=c50c4316e1eed362bee387e4cbfbe1138957f75b;p=git.git diff: don't presume empty file when corresponding object is missing The low-level diff code will happily produce totally bogus diff output with a broken repository via format-patch and friends by treating missing objects as empty files. Let's prevent that from happening any longer. Reported-by: Uwe Kleine-König Signed-off-by: Nicolas Pitre Signed-off-by: Junio C Hamano --- diff --git a/diff.c b/diff.c index 381cc8d4f..69cdae54b 100644 --- a/diff.c +++ b/diff.c @@ -2124,10 +2124,14 @@ int diff_populate_filespec(struct diff_filespec *s, int size_only) } else { enum object_type type; - if (size_only) + if (size_only) { type = sha1_object_info(s->sha1, &s->size); - else { + if (type < 0) + die("unable to read %s", sha1_to_hex(s->sha1)); + } else { s->data = read_sha1_file(s->sha1, &type, &s->size); + if (!s->data) + die("unable to read %s", sha1_to_hex(s->sha1)); s->should_free = 1; } }