diff options
-rw-r--r-- | src/nvim/statusline.c | 3 | ||||
-rw-r--r-- | test/old/testdir/test_statusline.vim | 7 |
2 files changed, 10 insertions, 0 deletions
diff --git a/src/nvim/statusline.c b/src/nvim/statusline.c index 05649e9b7f..feb67ad6fa 100644 --- a/src/nvim/statusline.c +++ b/src/nvim/statusline.c @@ -1373,6 +1373,9 @@ int build_stl_str_hl(win_T *wp, char *out, size_t outlen, char *fmt, char *opt_n // An invalid item was specified. // Continue processing on the next character of the format string. if (vim_strchr(STL_ALL, (uint8_t)(*fmt_p)) == NULL) { + if (*fmt_p == NUL) { // can happen with "%0" + break; + } fmt_p++; continue; } diff --git a/test/old/testdir/test_statusline.vim b/test/old/testdir/test_statusline.vim index 1e06ad1c67..4bbb46de0a 100644 --- a/test/old/testdir/test_statusline.vim +++ b/test/old/testdir/test_statusline.vim @@ -444,6 +444,13 @@ func Test_statusline() set splitbelow& endfunc +func Test_statusline_trailing_percent_zero() + " this was causing illegal memory access + set laststatus=2 stl=%!%0 + call assert_fails('redraw', 'E15: Invalid expression: "%0"') + set laststatus& stl& +endfunc + func Test_statusline_visual() func CallWordcount() call wordcount() |