]> granicus.if.org Git - vim/commitdiff
patch 8.1.0502: internal diff fails when diffing a context diff v8.1.0502
authorBram Moolenaar <Bram@vim.org>
Wed, 31 Oct 2018 21:57:26 +0000 (22:57 +0100)
committerBram Moolenaar <Bram@vim.org>
Wed, 31 Oct 2018 21:57:26 +0000 (22:57 +0100)
Problem:    Internal diff fails when diffing a context diff. (Hirohito Higashi)
Solution:   Only use callback calls with one line. (closes #3581)

src/diff.c
src/testdir/dumps/Test_diff_of_diff_01.dump [new file with mode: 0644]
src/version.c

index 23503d8266b917faa09c51f97da0bcc3c1636b1d..c001761340a13e4fa50ed8367d86ed0bbcbfc09b 100644 (file)
@@ -3206,21 +3206,23 @@ parse_diff_unified(
 xdiff_out(void *priv, mmbuffer_t *mb, int nbuf)
 {
     diffout_T  *dout = (diffout_T *)priv;
-    int                i;
     char_u     *p;
 
-    for (i = 0; i < nbuf; i++)
-    {
-       // We are only interested in the header lines, skip text lines.
-       if (STRNCMP(mb[i].ptr, "@@ ", 3)  != 0)
-           continue;
-       if (ga_grow(&dout->dout_ga, 1) == FAIL)
-           return -1;
-       p = vim_strnsave((char_u *)mb[i].ptr, mb[i].size);
-       if (p == NULL)
-           return -1;
-       ((char_u **)dout->dout_ga.ga_data)[dout->dout_ga.ga_len++] = p;
-    }
+    // The header line always comes by itself, text lines in at least two
+    // parts.  We drop the text part.
+    if (nbuf > 1)
+       return 0;
+
+    // sanity check
+    if (STRNCMP(mb[0].ptr, "@@ ", 3)  != 0)
+       return 0;
+
+    if (ga_grow(&dout->dout_ga, 1) == FAIL)
+       return -1;
+    p = vim_strnsave((char_u *)mb[0].ptr, mb[0].size);
+    if (p == NULL)
+       return -1;
+    ((char_u **)dout->dout_ga.ga_data)[dout->dout_ga.ga_len++] = p;
     return 0;
 }
 
diff --git a/src/testdir/dumps/Test_diff_of_diff_01.dump b/src/testdir/dumps/Test_diff_of_diff_01.dump
new file mode 100644 (file)
index 0000000..0e47a86
--- /dev/null
@@ -0,0 +1,20 @@
+| +0#0000e05#a8a8a8255@1|a+0#0000000#ffffff0@1| @32||+1&&| +0#0000e05#a8a8a8255@1>a+0#0000000#ffffff0@1| @32
+| +0#0000e05#a8a8a8255@1|b+0#0000000#ffffff0@1| @32||+1&&| +0#0000e05#a8a8a8255@1|b+0#0000000#ffffff0@1| @32
+| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0@1| @32||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0@1| @32
+| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|@+0#0000000#5fd7ff255@1| |-|3|,|2| |+|5|,|7| |@@1| @19
+| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|d+0#0000000#5fd7ff255@1| @32
+| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|e+0#0000000#5fd7ff255@1| @32
+| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|f+0#0000000#5fd7ff255@1| @32
+| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
+| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
+| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
+| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
+| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
+| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
+| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
+| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
+| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
+| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
+| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
+|[+1#0000000&|N|o| |N|a|m|e|]| |[|+|]| @5|1|,|1| @11|A|l@1| |[+3&&|N|o| |N|a|m|e|]| |[|+|]| @5|1|,|1| @11|A|l@1
+| +0&&@74
index 73d06215ffce192486047338be718f52022d0a4b..d2bed0e5d49c9a124516efaeecdb5518bf30e063 100644 (file)
@@ -792,6 +792,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    502,
 /**/
     501,
 /**/