Skip to content

Commit

Permalink
diffcore-break: don't divide by zero
Browse files Browse the repository at this point in the history
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 <[email protected]>
Signed-off-by: Junio C Hamano <[email protected]>
  • Loading branch information
johnkeeping authored and gitster committed Apr 3, 2013
1 parent 1599999 commit e7b00c5
Showing 1 changed file with 3 additions and 0 deletions.
3 changes: 3 additions & 0 deletions diffcore-break.c
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down

0 comments on commit e7b00c5

Please sign in to comment.