diff options
author | John Keeping <john@keeping.me.uk> | 2013-04-03 20:24:05 +0100 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2013-04-03 12:48:02 -0700 |
commit | e7b00c57640fa2bf11e4218b588f51cc5a9a754e (patch) | |
tree | f0d0b2ae827986d72de436e0cc48c7d83f6a3213 /diffcore-break.c | |
parent | 15999998fbda60552742275570947431b57108ae (diff) | |
download | git-e7b00c57640fa2bf11e4218b588f51cc5a9a754e.tar.gz |
diffcore-break: don't divide by zero
When the source file is empty, the calculation of the merge score
results in a division by zero. In the situation:
== preimage == == postimage ==
F (empty file) F (a large file)
E (a new empty file)
it does not make sense to consider F->E as a rename, so it is better not
to break the pre- and post-image of F.
Bail out early in this case to avoid hitting the divide-by-zero. This
causes the merge score to be left at zero.
Signed-off-by: John Keeping <john@keeping.me.uk>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'diffcore-break.c')
-rw-r--r-- | diffcore-break.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/diffcore-break.c b/diffcore-break.c index 44f8678d22..1d9e530a84 100644 --- a/diffcore-break.c +++ b/diffcore-break.c @@ -68,6 +68,9 @@ static int should_break(struct diff_filespec *src, if (max_size < MINIMUM_BREAK_SIZE) return 0; /* we do not break too small filepair */ + if (!src->size) + return 0; /* we do not let empty files get renamed */ + if (diffcore_count_changes(src, dst, &src->cnt_data, &dst->cnt_data, 0, |