Skip to content

Commit f1694b4

Browse files
ynkdirchrisbra
authored andcommitted
patch 9.1.0740: incorrect internal diff with empty file
Problem: incorrect internal diff with an empty file Solution: Set pointer to NULL, instead of using an empty line file (Yukihiro Nakadaira) When using internal diff, empty file is read as one empty line file. So result differs from external diff. closes: #15719 Signed-off-by: Yukihiro Nakadaira <yukihiro.nakadaira@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
1 parent a6de287 commit f1694b4

File tree

5 files changed

+58
-1
lines changed

5 files changed

+58
-1
lines changed

src/diff.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -760,6 +760,13 @@ diff_write_buffer(buf_T *buf, diffin_T *din)
760760
long len = 0;
761761
char_u *ptr;
762762

763+
if (buf->b_ml.ml_flags & ML_EMPTY)
764+
{
765+
din->din_mmfile.ptr = NULL;
766+
din->din_mmfile.size = 0;
767+
return OK;
768+
}
769+
763770
// xdiff requires one big block of memory with all the text.
764771
for (lnum = 1; lnum <= buf->b_ml.ml_line_count; ++lnum)
765772
len += ml_get_buf_len(buf, lnum) + 1;
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
| +0#0000e05#a8a8a8255@1|0+0#0000000#5fd7ff255| @33||+1&#ffffff0| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34
2+
|~+0&#ffffff0| @35||+1#0000000&| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@34
3+
|~+0#4040ff13&| @35||+1#0000000&|~+0#4040ff13&| @35
4+
|~| @35||+1#0000000&|~+0#4040ff13&| @35
5+
|~| @35||+1#0000000&|~+0#4040ff13&| @35
6+
|~| @35||+1#0000000&|~+0#4040ff13&| @35
7+
|~| @35||+1#0000000&|~+0#4040ff13&| @35
8+
|~| @35||+1#0000000&|~+0#4040ff13&| @35
9+
|~| @35||+1#0000000&|~+0#4040ff13&| @35
10+
|~| @35||+1#0000000&|~+0#4040ff13&| @35
11+
|~| @35||+1#0000000&|~+0#4040ff13&| @35
12+
|~| @35||+1#0000000&|~+0#4040ff13&| @35
13+
|~| @35||+1#0000000&|~+0#4040ff13&| @35
14+
|~| @35||+1#0000000&|~+0#4040ff13&| @35
15+
|~| @35||+1#0000000&|~+0#4040ff13&| @35
16+
|~| @35||+1#0000000&|~+0#4040ff13&| @35
17+
|~| @35||+1#0000000&|~+0#4040ff13&| @35
18+
|~| @35||+1#0000000&|~+0#4040ff13&| @35
19+
|X+3#0000000&|d|i|f|i|l|e|1| @10|1|,|1| @11|A|l@1| |X+1&&|d|i|f|i|l|e|2| @10|0|,|0|-|1| @9|A|l@1
20+
|:+0&&> @73
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|0+0#0000000#5fd7ff255| @33
2+
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@34||+1&&|~+0#4040ff13&| @35
3+
|~| @35||+1#0000000&|~+0#4040ff13&| @35
4+
|~| @35||+1#0000000&|~+0#4040ff13&| @35
5+
|~| @35||+1#0000000&|~+0#4040ff13&| @35
6+
|~| @35||+1#0000000&|~+0#4040ff13&| @35
7+
|~| @35||+1#0000000&|~+0#4040ff13&| @35
8+
|~| @35||+1#0000000&|~+0#4040ff13&| @35
9+
|~| @35||+1#0000000&|~+0#4040ff13&| @35
10+
|~| @35||+1#0000000&|~+0#4040ff13&| @35
11+
|~| @35||+1#0000000&|~+0#4040ff13&| @35
12+
|~| @35||+1#0000000&|~+0#4040ff13&| @35
13+
|~| @35||+1#0000000&|~+0#4040ff13&| @35
14+
|~| @35||+1#0000000&|~+0#4040ff13&| @35
15+
|~| @35||+1#0000000&|~+0#4040ff13&| @35
16+
|~| @35||+1#0000000&|~+0#4040ff13&| @35
17+
|~| @35||+1#0000000&|~+0#4040ff13&| @35
18+
|~| @35||+1#0000000&|~+0#4040ff13&| @35
19+
|X+3#0000000&|d|i|f|i|l|e|1| @10|0|,|0|-|1| @9|A|l@1| |X+1&&|d|i|f|i|l|e|2| @10|1|,|1| @11|A|l@1
20+
|:+0&&> @73

src/testdir/test_diffmode.vim

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1015,9 +1015,17 @@ func Test_diff_screen()
10151015
call WriteDiffFiles(buf, ['a ', 'x', 'cd', 'ef', 'xx xx', 'foo', 'bar'], ['a', 'x', 'c d', ' ef', 'xx xx', 'foo', '', 'bar'])
10161016
call VerifyInternal(buf, 'Test_diff_19', " diffopt+=iwhiteeol")
10171017

1018-
" Test 19: test diffopt+=iwhiteall
1018+
" Test 20: test diffopt+=iwhiteall
10191019
call VerifyInternal(buf, 'Test_diff_20', " diffopt+=iwhiteall")
10201020

1021+
" Test 21: Delete all lines
1022+
call WriteDiffFiles(buf, [0], [])
1023+
call VerifyBoth(buf, "Test_diff_21", "")
1024+
1025+
" Test 22: Add line to empty file
1026+
call WriteDiffFiles(buf, [], [0])
1027+
call VerifyBoth(buf, "Test_diff_22", "")
1028+
10211029
" clean up
10221030
call StopVimInTerminal(buf)
10231031
call delete('Xdifile1')

src/version.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -704,6 +704,8 @@ static char *(features[]) =
704704

705705
static int included_patches[] =
706706
{ /* Add new patch number below this line */
707+
/**/
708+
740,
707709
/**/
708710
739,
709711
/**/

0 commit comments

Comments
 (0)