From d28c8af623b0d15740c2af0106d8e2bf54a3ac52 Mon Sep 17 00:00:00 2001 From: Junio C Hamano Date: Mon, 12 Dec 2005 12:50:40 -0800 Subject: diffcore-break.c: check diff_delta() return value. This bug caused Darrin Thompson to notice that our deltifier was half broken and punting on an empty blob. Signed-off-by: Junio C Hamano --- diffcore-break.c | 2 ++ 1 file changed, 2 insertions(+) (limited to 'diffcore-break.c') diff --git a/diffcore-break.c b/diffcore-break.c index 06f9a7f0ee..e6a468e6b0 100644 --- a/diffcore-break.c +++ b/diffcore-break.c @@ -66,6 +66,8 @@ static int should_break(struct diff_filespec *src, delta = diff_delta(src->data, src->size, dst->data, dst->size, &delta_size, 0); + if (!delta) + return 0; /* error but caught downstream */ /* Estimate the edit size by interpreting delta. */ if (count_delta(delta, delta_size, -- cgit v1.2.3 From 0532a5e46b88cd70c952a2bf5dc63681be32a2d9 Mon Sep 17 00:00:00 2001 From: Junio C Hamano Date: Mon, 12 Dec 2005 17:15:55 -0800 Subject: diffcore-break: do not break too small filepair. Somehow we checked only one side and not the other. By checking the filesize upfront, we can bypass generating delta unnecessarily. Signed-off-by: Junio C Hamano --- diffcore-break.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'diffcore-break.c') diff --git a/diffcore-break.c b/diffcore-break.c index e6a468e6b0..c57513a4fa 100644 --- a/diffcore-break.c +++ b/diffcore-break.c @@ -62,6 +62,8 @@ static int should_break(struct diff_filespec *src, return 0; /* error but caught downstream */ base_size = ((src->size < dst->size) ? src->size : dst->size); + if (base_size < MINIMUM_BREAK_SIZE) + return 0; /* we do not break too small filepair */ delta = diff_delta(src->data, src->size, dst->data, dst->size, @@ -170,8 +172,7 @@ void diffcore_break(int break_score) !S_ISDIR(p->one->mode) && !S_ISDIR(p->two->mode) && !strcmp(p->one->path, p->two->path)) { if (should_break(p->one, p->two, - break_score, &score) && - MINIMUM_BREAK_SIZE <= p->one->size) { + break_score, &score)) { /* Split this into delete and create */ struct diff_filespec *null_one, *null_two; struct diff_filepair *dp; -- cgit v1.2.3