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 <u.kleine-koenig@pengutronix.de> Signed-off-by: Nicolas Pitre <nico@fluxnic.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
e923eaeb90
commit
c50c4316e1
8
diff.c
8
diff.c
@ -2124,10 +2124,14 @@ int diff_populate_filespec(struct diff_filespec *s, int size_only)
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
enum object_type type;
|
enum object_type type;
|
||||||
if (size_only)
|
if (size_only) {
|
||||||
type = sha1_object_info(s->sha1, &s->size);
|
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);
|
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;
|
s->should_free = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user