From c50c4316e1eed362bee387e4cbfbe1138957f75b Mon Sep 17 00:00:00 2001 From: Nicolas Pitre Date: Fri, 22 Oct 2010 00:02:27 -0400 Subject: [PATCH] diff: don't presume empty file when corresponding object is missing MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 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.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) 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; } } -- 2.26.2