Browse Source

Merge branch 'tg/range-diff-corner-case-fix'

Recently added "range-diff" had a corner-case bug to cause it
segfault, which has been corrected.

* tg/range-diff-corner-case-fix:
  linear-assignment: fix potential out of bounds memory access
maint
Junio C Hamano 6 years ago
parent
commit
51bbcda1c7
  1. 6
      linear-assignment.c
  2. 5
      t/t3206-range-diff.sh

6
linear-assignment.c

@ -19,6 +19,12 @@ void compute_assignment(int column_count, int row_count, int *cost, @@ -19,6 +19,12 @@ void compute_assignment(int column_count, int row_count, int *cost,
int *free_row, free_count = 0, saved_free_count, *pred, *col;
int i, j, phase;

if (column_count < 2) {
memset(column2row, 0, sizeof(int) * column_count);
memset(row2column, 0, sizeof(int) * row_count);
return;
}

memset(column2row, -1, sizeof(int) * column_count);
memset(row2column, -1, sizeof(int) * row_count);
ALLOC_ARRAY(v, column_count);

5
t/t3206-range-diff.sh

@ -122,6 +122,11 @@ test_expect_success 'changed commit' ' @@ -122,6 +122,11 @@ test_expect_success 'changed commit' '
test_cmp expected actual
'

test_expect_success 'no commits on one side' '
git commit --amend -m "new message" &&
git range-diff master HEAD@{1} HEAD
'

test_expect_success 'changed message' '
git range-diff --no-color topic...changed-message >actual &&
sed s/Z/\ /g >expected <<-EOF &&

Loading…
Cancel
Save