Merge branch 'tg/range-diff-corner-case-fix'
authorJunio C Hamano <gitster@pobox.com>
Mon, 24 Sep 2018 17:30:53 +0000 (10:30 -0700)
committerJunio C Hamano <gitster@pobox.com>
Mon, 24 Sep 2018 17:30:53 +0000 (10:30 -0700)
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

1  2 
t/t3206-range-diff.sh
diff --combined t/t3206-range-diff.sh
index d481f2925924317a44f1bba65e6ca41fc57cc65d,fb4c13a84ade63470f4dabc976ff5f5369c17e1e..045aca1c18bec3d5278eb50a461df0588dd84618
@@@ -122,6 -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 &&
            Z
            +    Also a silly comment here!
            +
 -          Zdiff --git a/file b/file
 -          Z--- a/file
 -          Z+++ b/file
 +          Z diff --git a/file b/file
 +          Z --- a/file
 +          Z +++ b/file
        3:  147e64e = 3:  b9cb956 s/11/B/
        4:  a63e992 = 4:  8add5f1 s/12/B/
        EOF
        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 'dual-coloring' '
 +      sed -e "s|^:||" >expect <<-\EOF &&
 +      :<YELLOW>1:  a4b3333 = 1:  f686024 s/5/A/<RESET>
 +      :<RED>2:  f51d370 <RESET><YELLOW>!<RESET><GREEN> 2:  4ab067d<RESET><YELLOW> s/4/A/<RESET>
 +      :    <REVERSE><CYAN>@@ -2,6 +2,8 @@<RESET>
 +      :     <RESET>
 +      :         s/4/A/<RESET>
 +      :     <RESET>
 +      :    <REVERSE><GREEN>+<RESET><BOLD>    Also a silly comment here!<RESET>
 +      :    <REVERSE><GREEN>+<RESET>
 +      :      diff --git a/file b/file<RESET>
 +      :      --- a/file<RESET>
 +      :      +++ b/file<RESET>
 +      :<RED>3:  0559556 <RESET><YELLOW>!<RESET><GREEN> 3:  b9cb956<RESET><YELLOW> s/11/B/<RESET>
 +      :    <REVERSE><CYAN>@@ -10,7 +10,7 @@<RESET>
 +      :      9<RESET>
 +      :      10<RESET>
 +      :    <RED> -11<RESET>
 +      :    <REVERSE><RED>-<RESET><FAINT;GREEN>+BB<RESET>
 +      :    <REVERSE><GREEN>+<RESET><BOLD;GREEN>+B<RESET>
 +      :      12<RESET>
 +      :      13<RESET>
 +      :      14<RESET>
 +      :<RED>4:  d966c5c <RESET><YELLOW>!<RESET><GREEN> 4:  8add5f1<RESET><YELLOW> s/12/B/<RESET>
 +      :    <REVERSE><CYAN>@@ -8,7 +8,7 @@<RESET>
 +      :    <CYAN> @@<RESET>
 +      :      9<RESET>
 +      :      10<RESET>
 +      :    <REVERSE><RED>-<RESET><FAINT> BB<RESET>
 +      :    <REVERSE><GREEN>+<RESET><BOLD> B<RESET>
 +      :    <RED> -12<RESET>
 +      :    <GREEN> +B<RESET>
 +      :      13<RESET>
 +      EOF
 +      git range-diff changed...changed-message --color --dual-color >actual.raw &&
 +      test_decode_color >actual <actual.raw &&
 +      test_cmp expect actual
 +'
 +
 +for prev in topic master..topic
 +do
 +      test_expect_success "format-patch --range-diff=$prev" '
 +              git format-patch --stdout --cover-letter --range-diff=$prev \
 +                      master..unmodified >actual &&
 +              grep "= 1: .* s/5/A" actual &&
 +              grep "= 2: .* s/4/A" actual &&
 +              grep "= 3: .* s/11/B" actual &&
 +              grep "= 4: .* s/12/B" actual
 +      '
 +done
 +
 +test_expect_success 'format-patch --range-diff as commentary' '
 +      git format-patch --stdout --range-diff=HEAD~1 HEAD~1 >actual &&
 +      test_i18ngrep "^Range-diff:$" actual
  '
  
  test_done