diff --git a/src/nvim/statusline.c b/src/nvim/statusline.c index 9876936d5d..7d77a6989a 100644 --- a/src/nvim/statusline.c +++ b/src/nvim/statusline.c @@ -1377,6 +1377,9 @@ int build_stl_str_hl(win_T *wp, char *out, size_t outlen, char *fmt, OptIndex op fmt_p++; if (ascii_isdigit(*fmt_p)) { maxwid = getdigits_int(&fmt_p, false, 50); + if (maxwid <= 0) { // overflow or an explicit zero + maxwid = 50; + } } } diff --git a/test/functional/api/vim_spec.lua b/test/functional/api/vim_spec.lua index 16a2acb0e5..b42a8bbb01 100644 --- a/test/functional/api/vim_spec.lua +++ b/test/functional/api/vim_spec.lua @@ -4537,6 +4537,13 @@ describe('API', function() }, api.nvim_eval_statusline('Should be truncated%<', { maxwidth = 15 })) end) + it('does not take a zero item width literally', function() + command('file some/dir/testfile.txt') + eq({ str = 'abc', width = 3 }, api.nvim_eval_statusline('%.0(abc%)', {})) + eq(api.nvim_eval_statusline('%.50f', {}), api.nvim_eval_statusline('%.0f', {})) + eq(api.nvim_eval_statusline('%.50l', {}), api.nvim_eval_statusline('%.0l', {})) + end) + it('has correct default fillchar', function() local oldwin = api.nvim_get_current_win() command('set fillchars=stl:#,stlnc:$,wbr:%')