From 7231438f124eff0ce0b9a8998ac7838abc094a8b Mon Sep 17 00:00:00 2001 From: James McCoy Date: Sat, 12 Nov 2016 08:06:58 -0500 Subject: vim-patch:7.4.1640 Problem: Crash when an autocommand changes a quickfix list. (Dominique) Solution: Check wether an entry is still valid. (Yegappan Lakshmanan, Hirohito Higashi) https://github.com/vim/vim/commit/ffec3c53496d49668669deabc0724ec78e2274fd --- test/functional/legacy/quickfix_spec.lua | 46 +++++++++++++++++++++++++++++++- 1 file changed, 45 insertions(+), 1 deletion(-) (limited to 'test/functional') diff --git a/test/functional/legacy/quickfix_spec.lua b/test/functional/legacy/quickfix_spec.lua index b5a8e10a97..480e046f55 100644 --- a/test/functional/legacy/quickfix_spec.lua +++ b/test/functional/legacy/quickfix_spec.lua @@ -265,7 +265,7 @@ describe('helpgrep', function() autocmd BufReadCmd t call R(expand("")) augroup END - function R(n) + function! R(n) quit endfunc @@ -406,6 +406,43 @@ describe('helpgrep', function() augroup END augroup! QfBufWinEnter endfunc + + function XquickfixChangedByAutocmd(cchar) + let Xolder = a:cchar . 'older' + let Xgetexpr = a:cchar . 'getexpr' + let Xrewind = a:cchar . 'rewind' + if a:cchar == 'c' + let Xsetlist = 'setqflist(' + let ErrorNr = 'E925' + function! ReadFunc() + colder + cgetexpr [] + endfunc + else + let Xsetlist = 'setloclist(0,' + let ErrorNr = 'E926' + function! ReadFunc() + lolder + lgetexpr [] + endfunc + endif + + augroup testgroup + au! + autocmd BufReadCmd t call ReadFunc() + augroup END + + bwipe! + let words = [ "a", "b" ] + let qflist = [] + for word in words + call add(qflist, {'filename': 't'}) + exec "call " . Xsetlist . "qflist, '')" + endfor + exec "call assert_fails('" . Xrewind . "', '" . ErrorNr . ":')" + + augroup! testgroup + endfunc ]]) end) @@ -478,6 +515,13 @@ describe('helpgrep', function() call('Test_locationlist') expected_empty() end) + + it('is changed by autocmd', function() + call('XquickfixChangedByAutocmd', 'c') + expected_empty() + call('XquickfixChangedByAutocmd', 'l') + expected_empty() + end) end) describe('errorformat', function() -- cgit From c0fd830be4ef3eafb756c463aee6408323ba4e58 Mon Sep 17 00:00:00 2001 From: James McCoy Date: Sat, 12 Nov 2016 13:52:50 -0500 Subject: Bump all nvim-specific error codes above E5000 In order to not conflict with new error codes that Vim adds, all Neovim error codes should be above 5000. The three existing sub-5000 error codes (E926, E951, and E952) are now E50003, E5004, and E5005 respectively. E953 was removed in 6167ce6df2753d5474ad49aea19f5957128ab015, so just remove it from the help. --- test/functional/eval/msgpack_functions_spec.lua | 20 ++++++++++---------- test/functional/shada/errors_spec.lua | 4 ++-- test/functional/shada/variables_spec.lua | 4 ++-- 3 files changed, 14 insertions(+), 14 deletions(-) (limited to 'test/functional') diff --git a/test/functional/eval/msgpack_functions_spec.lua b/test/functional/eval/msgpack_functions_spec.lua index f11c08de05..ebe7c5492b 100644 --- a/test/functional/eval/msgpack_functions_spec.lua +++ b/test/functional/eval/msgpack_functions_spec.lua @@ -566,27 +566,27 @@ describe('msgpackdump() function', function() it('fails to dump a function reference', function() execute('let Todump = function("tr")') - eq('Vim(call):E951: Error while dumping msgpackdump() argument, index 0, itself: attempt to dump function reference', + eq('Vim(call):E5004: Error while dumping msgpackdump() argument, index 0, itself: attempt to dump function reference', exc_exec('call msgpackdump([Todump])')) end) it('fails to dump a function reference in a list', function() execute('let todump = [function("tr")]') - eq('Vim(call):E951: Error while dumping msgpackdump() argument, index 0, index 0: attempt to dump function reference', + eq('Vim(call):E5004: Error while dumping msgpackdump() argument, index 0, index 0: attempt to dump function reference', exc_exec('call msgpackdump([todump])')) end) it('fails to dump a recursive list', function() execute('let todump = [[[]]]') execute('call add(todump[0][0], todump)') - eq('Vim(call):E952: Unable to dump msgpackdump() argument, index 0: container references itself in index 0, index 0, index 0', + eq('Vim(call):E5005: Unable to dump msgpackdump() argument, index 0: container references itself in index 0, index 0, index 0', exc_exec('call msgpackdump([todump])')) end) it('fails to dump a recursive dict', function() execute('let todump = {"d": {"d": {}}}') execute('call extend(todump.d.d, {"d": todump})') - eq('Vim(call):E952: Unable to dump msgpackdump() argument, index 0: container references itself in key \'d\', key \'d\', key \'d\'', + eq('Vim(call):E5005: Unable to dump msgpackdump() argument, index 0: container references itself in key \'d\', key \'d\', key \'d\'', exc_exec('call msgpackdump([todump])')) end) @@ -605,35 +605,35 @@ describe('msgpackdump() function', function() it('fails to dump a recursive list in a special dict', function() execute('let todump = {"_TYPE": v:msgpack_types.array, "_VAL": []}') execute('call add(todump._VAL, todump)') - eq('Vim(call):E952: Unable to dump msgpackdump() argument, index 0: container references itself in index 0', + eq('Vim(call):E5005: Unable to dump msgpackdump() argument, index 0: container references itself in index 0', exc_exec('call msgpackdump([todump])')) end) it('fails to dump a recursive (key) map in a special dict', function() execute('let todump = {"_TYPE": v:msgpack_types.map, "_VAL": []}') execute('call add(todump._VAL, [todump, 0])') - eq('Vim(call):E952: Unable to dump msgpackdump() argument, index 0: container references itself in index 1', + eq('Vim(call):E5005: Unable to dump msgpackdump() argument, index 0: container references itself in index 1', exc_exec('call msgpackdump([todump])')) end) it('fails to dump a recursive (val) map in a special dict', function() execute('let todump = {"_TYPE": v:msgpack_types.map, "_VAL": []}') execute('call add(todump._VAL, [0, todump])') - eq('Vim(call):E952: Unable to dump msgpackdump() argument, index 0: container references itself in key 0 at index 0 from special map', + eq('Vim(call):E5005: Unable to dump msgpackdump() argument, index 0: container references itself in key 0 at index 0 from special map', exc_exec('call msgpackdump([todump])')) end) it('fails to dump a recursive (key) map in a special dict, _VAL reference', function() execute('let todump = {"_TYPE": v:msgpack_types.map, "_VAL": [[[], []]]}') execute('call add(todump._VAL[0][0], todump._VAL)') - eq('Vim(call):E952: Unable to dump msgpackdump() argument, index 0: container references itself in key [[[[...@0], []]]] at index 0 from special map, index 0', + eq('Vim(call):E5005: Unable to dump msgpackdump() argument, index 0: container references itself in key [[[[...@0], []]]] at index 0 from special map, index 0', exc_exec('call msgpackdump([todump])')) end) it('fails to dump a recursive (val) map in a special dict, _VAL reference', function() execute('let todump = {"_TYPE": v:msgpack_types.map, "_VAL": [[[], []]]}') execute('call add(todump._VAL[0][1], todump._VAL)') - eq('Vim(call):E952: Unable to dump msgpackdump() argument, index 0: container references itself in key [] at index 0 from special map, index 0', + eq('Vim(call):E5005: Unable to dump msgpackdump() argument, index 0: container references itself in key [] at index 0 from special map, index 0', exc_exec('call msgpackdump([todump])')) end) @@ -641,7 +641,7 @@ describe('msgpackdump() function', function() function() execute('let todump = {"_TYPE": v:msgpack_types.array, "_VAL": []}') execute('call add(todump._VAL, [0, todump._VAL])') - eq('Vim(call):E952: Unable to dump msgpackdump() argument, index 0: container references itself in index 0, index 1', + eq('Vim(call):E5005: Unable to dump msgpackdump() argument, index 0: container references itself in index 0, index 1', exc_exec('call msgpackdump([todump])')) end) diff --git a/test/functional/shada/errors_spec.lua b/test/functional/shada/errors_spec.lua index 98ead6cc3d..19f35571d7 100644 --- a/test/functional/shada/errors_spec.lua +++ b/test/functional/shada/errors_spec.lua @@ -497,7 +497,7 @@ $ it('errors when a funcref is stored in a variable', function() nvim_command('let F = function("tr")') nvim_command('set shada+=!') - eq('\nE951: Error while dumping variable g:F, itself: attempt to dump function reference' + eq('\nE5004: Error while dumping variable g:F, itself: attempt to dump function reference' .. '\nE574: Failed to write variable F', redir_exec('wshada')) end) @@ -506,7 +506,7 @@ $ nvim_command('let L = []') nvim_command('call add(L, L)') nvim_command('set shada+=!') - eq('\nE952: Unable to dump variable g:L: container references itself in index 0' + eq('\nE5005: Unable to dump variable g:L: container references itself in index 0' .. '\nE574: Failed to write variable L', redir_exec('wshada')) end) diff --git a/test/functional/shada/variables_spec.lua b/test/functional/shada/variables_spec.lua index 15502f0b71..a420462437 100644 --- a/test/functional/shada/variables_spec.lua +++ b/test/functional/shada/variables_spec.lua @@ -132,7 +132,7 @@ describe('ShaDa support code', function() meths.set_var('U', '10') nvim_command('set shada+=!') set_additional_cmd('set shada+=!') - eq('Vim(wshada):E951: Error while dumping variable g:F, itself: attempt to dump function reference', + eq('Vim(wshada):E5004: Error while dumping variable g:F, itself: attempt to dump function reference', exc_exec('wshada')) meths.set_option('shada', '') reset() @@ -145,7 +145,7 @@ describe('ShaDa support code', function() nvim_command('call add(L, L)') meths.set_var('U', '10') nvim_command('set shada+=!') - eq('Vim(wshada):E952: Unable to dump variable g:L: container references itself in index 0', + eq('Vim(wshada):E5005: Unable to dump variable g:L: container references itself in index 0', exc_exec('wshada')) meths.set_option('shada', '') set_additional_cmd('set shada+=!') -- cgit From caa33aaaf8b044cf3a8311213d0841d2d9e591a5 Mon Sep 17 00:00:00 2001 From: James McCoy Date: Sat, 12 Nov 2016 14:18:29 -0500 Subject: vim-patch:7.4.1647 Problem: Using freed memory after setqflist() and ":caddbuffer". (Dominique) Solution: Set qf_ptr when adding the first item to the quickfix list. https://github.com/vim/vim/commit/8b20179c657b4266dff115486ca68c6a50324071 --- test/functional/legacy/quickfix_spec.lua | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'test/functional') diff --git a/test/functional/legacy/quickfix_spec.lua b/test/functional/legacy/quickfix_spec.lua index 480e046f55..fa9ddc78ae 100644 --- a/test/functional/legacy/quickfix_spec.lua +++ b/test/functional/legacy/quickfix_spec.lua @@ -443,6 +443,17 @@ describe('helpgrep', function() augroup! testgroup endfunc + + func Test_caddbuffer_to_empty() + helpgr quickfix + call setqflist([], 'r') + cad + call assert_fails('cn', 'E553:') + " Upstream calls quit! here to verify vim is still + " running, but that will be covered by the + " expected_empty() call in the busted test + " quit! + endfunc ]]) end) @@ -522,6 +533,11 @@ describe('helpgrep', function() call('XquickfixChangedByAutocmd', 'l') expected_empty() end) + + it('does not crash after using caddbuffer with an empty qf list', function() + call('Test_caddbuffer_to_empty') + expected_empty() + end) end) describe('errorformat', function() -- cgit From 830bf8665b6a98705b16d977ca7d11c2ca51dca8 Mon Sep 17 00:00:00 2001 From: James McCoy Date: Sat, 12 Nov 2016 15:45:10 -0500 Subject: vim-patch:7.4.1650 Problem: Quickfix test fails. Solution: Accept any number of matches. https://github.com/vim/vim/commit/f68f1d70799631d38461c36cd59d08cf839b010d --- test/functional/legacy/quickfix_spec.lua | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) (limited to 'test/functional') diff --git a/test/functional/legacy/quickfix_spec.lua b/test/functional/legacy/quickfix_spec.lua index fa9ddc78ae..5e5aefc4e6 100644 --- a/test/functional/legacy/quickfix_spec.lua +++ b/test/functional/legacy/quickfix_spec.lua @@ -448,11 +448,13 @@ describe('helpgrep', function() helpgr quickfix call setqflist([], 'r') cad - call assert_fails('cn', 'E553:') - " Upstream calls quit! here to verify vim is still - " running, but that will be covered by the - " expected_empty() call in the busted test - " quit! + try + silent cn + catch + " number of matches is unknown + call assert_true(v:exception =~ 'E553:') + endtry + quit! endfunc ]]) end) -- cgit From 2e5736e2cd4ef14ec23c1e0176fbcb17c9f55eba Mon Sep 17 00:00:00 2001 From: James McCoy Date: Sat, 12 Nov 2016 15:58:19 -0500 Subject: vim-patch:7.4.1664 Problem: Crash in :cgetexpr. Solution: Check for NULL pointer. (Dominique) Add a test. https://github.com/vim/vim/commit/89c64d557dbe0bacfdd7b2872411b00cc1523d85 --- test/functional/legacy/quickfix_spec.lua | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'test/functional') diff --git a/test/functional/legacy/quickfix_spec.lua b/test/functional/legacy/quickfix_spec.lua index 5e5aefc4e6..5787ff8ff3 100644 --- a/test/functional/legacy/quickfix_spec.lua +++ b/test/functional/legacy/quickfix_spec.lua @@ -540,6 +540,12 @@ describe('helpgrep', function() call('Test_caddbuffer_to_empty') expected_empty() end) + + it('cgetexpr does not crash with a NULL element in a list', function() + execute('cgetexpr [$x]') + -- Still alive? + eq(2, eval('1+1')) + end) end) describe('errorformat', function() -- cgit