diff --git a/src/register.c b/src/register.c index 267f9b38324b34aa7eed581ba8eb9ce0d6597187..876bdfb9ba2e5632ed4d3881f92768893873db96 100644 --- a/src/register.c +++ b/src/register.c @@ -304,7 +304,7 @@ get_register( if (copy) { // If we run out of memory some or all of the lines are empty. - if (reg->y_size == 0) + if (reg->y_size == 0 || y_current->y_array == NULL) reg->y_array = NULL; else reg->y_array = ALLOC_MULT(char_u *, reg->y_size); diff --git a/src/testdir/test_registers.vim b/src/testdir/test_registers.vim index d9cf7ed403a4d9d67c376b9bc0816a5a96745b62..9eb33e4c71fb5bc548a00e141521314e82be1116 100644 --- a/src/testdir/test_registers.vim +++ b/src/testdir/test_registers.vim @@ -167,3 +167,20 @@ func Test_recording_esc_sequence() set t_F2= endif endfunc + +" This was causing a crash because y_append was ending up being NULL +func Test_zero_y_append() + " Run in a separate Vim instance because changing 'encoding' may cause + " trouble for later tests. + let lines =<< trim END + d + silent ?n + next + so + sil! norm 0V€PSP + set enc=latin1 + + END + call writefile(lines, 'XTest_zero_y_append', 'D') + call RunVim([], [], '-u NONE -i NONE -e -s -S XTest_zero_y_append -c qa\!') +endfunc