0
0
mirror of https://github.com/vim/vim.git synced 2025-09-23 03:43:49 -04:00

patch 8.1.0502: internal diff fails when diffing a context diff

Problem:    Internal diff fails when diffing a context diff. (Hirohito Higashi)
Solution:   Only use callback calls with one line. (closes #3581)
This commit is contained in:
Bram Moolenaar
2018-10-31 22:57:26 +01:00
parent a9a8e04eab
commit f080d70a82
3 changed files with 37 additions and 13 deletions

View 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;
}