From ff48e61ec9ce0fed62b31609c2a83caaa862ccba Mon Sep 17 00:00:00 2001 From: VVKot Date: Sun, 19 Dec 2021 11:06:16 +0000 Subject: vim-patch:8.2.3762: if quickfix buffer is wiped out getqflist() still returns it Problem: If the quickfix buffer is wiped out getqflist() still returns its number. Solution: Use zero if the buffer is no longer present. (Yegappan Lakshmanan, closes vim/vim#9306) https://github.com/vim/vim/commit/56150da6879a96db1c84c7ec4ceedeb84969f606 --- src/nvim/quickfix.c | 12 +++++++++--- src/nvim/testdir/test_quickfix.vim | 7 +++++++ 2 files changed, 16 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/nvim/quickfix.c b/src/nvim/quickfix.c index e12a8bda2b..72fd035cbd 100644 --- a/src/nvim/quickfix.c +++ b/src/nvim/quickfix.c @@ -6020,12 +6020,18 @@ static int qf_winid(qf_info_T *qi) } /// Returns the number of the buffer displayed in the quickfix/location list -/// window. If there is no buffer associated with the list, then returns 0. +/// window. If there is no buffer associated with the list or the buffer is +/// wiped out, then returns 0. static int qf_getprop_qfbufnr(const qf_info_T *qi, dict_T *retdict) FUNC_ATTR_NONNULL_ARG(2) { - return tv_dict_add_nr(retdict, S_LEN("qfbufnr"), - (qi == NULL) ? 0 : qi->qf_bufnr); + int bufnum = 0; + + if (qi != NULL && buflist_findnr(qi->qf_bufnr) != NULL) { + bufnum = qi->qf_bufnr; + } + + return tv_dict_add_nr(retdict, S_LEN("qfbufnr"), bufnum); } /// Convert the keys in 'what' to quickfix list property flags. diff --git a/src/nvim/testdir/test_quickfix.vim b/src/nvim/testdir/test_quickfix.vim index 48bafc4b7e..14d13049d9 100644 --- a/src/nvim/testdir/test_quickfix.vim +++ b/src/nvim/testdir/test_quickfix.vim @@ -4483,6 +4483,13 @@ func Xqfbuf_test(cchar) call assert_equal(qfbnum, bufnr('')) Xclose + " When quickfix buffer is wiped out, getqflist() should return 0 + %bw! + Xexpr "" + Xopen + bw! + call assert_equal(0, g:Xgetlist({'qfbufnr': 0}).qfbufnr) + if a:cchar == 'l' %bwipe " For a location list, when both the file window and the location list -- cgit