Christian Brabandt | e1dc9a6 | 2023-09-02 14:40:13 +0200 | [diff] [blame] | 1 | " Some tests, that used to crash Vim |
| 2 | source check.vim |
| 3 | source screendump.vim |
| 4 | |
| 5 | CheckScreendump |
| 6 | |
| 7 | func Test_crash1() |
Christian Brabandt | d2a08ba | 2023-09-05 07:45:04 +0200 | [diff] [blame^] | 8 | CheckNotBSD |
| 9 | |
Christian Brabandt | fc68299 | 2023-09-03 20:20:52 +0200 | [diff] [blame] | 10 | if !executable('sh') |
| 11 | throw 'Skipped: sh not executable!' |
| 12 | endif |
Christian Brabandt | e1dc9a6 | 2023-09-02 14:40:13 +0200 | [diff] [blame] | 13 | " The following used to crash Vim |
Christian Brabandt | db510ca | 2023-09-03 09:23:12 +0200 | [diff] [blame] | 14 | let opts = #{cmd: 'sh'} |
Christian Brabandt | db510ca | 2023-09-03 09:23:12 +0200 | [diff] [blame] | 15 | let vim = GetVimProg() |
| 16 | |
Christian Brabandt | fc68299 | 2023-09-03 20:20:52 +0200 | [diff] [blame] | 17 | let buf = RunVimInTerminal('sh', opts) |
Christian Brabandt | db510ca | 2023-09-03 09:23:12 +0200 | [diff] [blame] | 18 | |
| 19 | let file = 'crash/poc_huaf1' |
| 20 | let cmn_args = "%s -u NONE -i NONE -n -e -s -S %s -c ':qa!'" |
| 21 | let args = printf(cmn_args, vim, file) |
| 22 | call term_sendkeys(buf, args .. |
Christian Brabandt | fc68299 | 2023-09-03 20:20:52 +0200 | [diff] [blame] | 23 | \ ' && echo "crash 1: [OK]" > X_crash1_result.txt' .. "\<cr>") |
| 24 | call TermWait(buf, 50) |
Christian Brabandt | db510ca | 2023-09-03 09:23:12 +0200 | [diff] [blame] | 25 | |
| 26 | let file = 'crash/poc_huaf2' |
| 27 | let args = printf(cmn_args, vim, file) |
| 28 | call term_sendkeys(buf, args .. |
| 29 | \ ' && echo "crash 2: [OK]" >> X_crash1_result.txt' .. "\<cr>") |
Christian Brabandt | fc68299 | 2023-09-03 20:20:52 +0200 | [diff] [blame] | 30 | call TermWait(buf, 50) |
Christian Brabandt | db510ca | 2023-09-03 09:23:12 +0200 | [diff] [blame] | 31 | |
| 32 | let file = 'crash/poc_huaf3' |
| 33 | let args = printf(cmn_args, vim, file) |
| 34 | call term_sendkeys(buf, args .. |
| 35 | \ ' && echo "crash 3: [OK]" >> X_crash1_result.txt' .. "\<cr>") |
Christian Brabandt | fc68299 | 2023-09-03 20:20:52 +0200 | [diff] [blame] | 36 | call TermWait(buf, 100) |
Christian Brabandt | db510ca | 2023-09-03 09:23:12 +0200 | [diff] [blame] | 37 | |
Christian Brabandt | fc68299 | 2023-09-03 20:20:52 +0200 | [diff] [blame] | 38 | let file = 'crash/bt_quickfix_poc' |
| 39 | let args = printf(cmn_args, vim, file) |
| 40 | call term_sendkeys(buf, args .. |
| 41 | \ ' && echo "crash 4: [OK]" >> X_crash1_result.txt' .. "\<cr>") |
| 42 | " clean up |
| 43 | call delete('Xerr') |
Christian Brabandt | fc68299 | 2023-09-03 20:20:52 +0200 | [diff] [blame] | 44 | " This test takes a bit longer |
Christian Brabandt | 623ba31 | 2023-09-04 22:09:12 +0200 | [diff] [blame] | 45 | call TermWait(buf, 1000) |
Christian Brabandt | db510ca | 2023-09-03 09:23:12 +0200 | [diff] [blame] | 46 | |
Christian Brabandt | ee9166e | 2023-09-03 21:24:33 +0200 | [diff] [blame] | 47 | let file = 'crash/poc_tagfunc.vim' |
| 48 | let args = printf(cmn_args, vim, file) |
| 49 | call term_sendkeys(buf, args .. |
| 50 | \ ' || echo "crash 5: [OK]" >> X_crash1_result.txt' .. "\<cr>") |
| 51 | |
| 52 | call TermWait(buf, 100) |
| 53 | |
Christian Brabandt | 6e60cf4 | 2023-09-03 21:43:46 +0200 | [diff] [blame] | 54 | let file = 'crash/bt_quickfix1_poc' |
| 55 | let args = printf(cmn_args, vim, file) |
| 56 | call term_sendkeys(buf, args .. |
| 57 | \ ' && echo "crash 6: [OK]" >> X_crash1_result.txt' .. "\<cr>") |
| 58 | " clean up |
| 59 | call delete('X') |
Christian Brabandt | 59adcb4 | 2023-09-04 22:42:55 +0200 | [diff] [blame] | 60 | call TermWait(buf, 3000) |
Christian Brabandt | 6e60cf4 | 2023-09-03 21:43:46 +0200 | [diff] [blame] | 61 | |
Christian Brabandt | db510ca | 2023-09-03 09:23:12 +0200 | [diff] [blame] | 62 | " clean up |
Christian Brabandt | e1dc9a6 | 2023-09-02 14:40:13 +0200 | [diff] [blame] | 63 | exe buf .. "bw!" |
| 64 | |
Christian Brabandt | db510ca | 2023-09-03 09:23:12 +0200 | [diff] [blame] | 65 | sp X_crash1_result.txt |
Christian Brabandt | fc68299 | 2023-09-03 20:20:52 +0200 | [diff] [blame] | 66 | |
| 67 | let expected = [ |
| 68 | \ 'crash 1: [OK]', |
| 69 | \ 'crash 2: [OK]', |
| 70 | \ 'crash 3: [OK]', |
| 71 | \ 'crash 4: [OK]', |
Christian Brabandt | ee9166e | 2023-09-03 21:24:33 +0200 | [diff] [blame] | 72 | \ 'crash 5: [OK]', |
Christian Brabandt | 6e60cf4 | 2023-09-03 21:43:46 +0200 | [diff] [blame] | 73 | \ 'crash 6: [OK]', |
Christian Brabandt | fc68299 | 2023-09-03 20:20:52 +0200 | [diff] [blame] | 74 | \ ] |
| 75 | |
| 76 | call assert_equal(expected, getline(1, '$')) |
Christian Brabandt | db510ca | 2023-09-03 09:23:12 +0200 | [diff] [blame] | 77 | bw! |
Christian Brabandt | e1dc9a6 | 2023-09-02 14:40:13 +0200 | [diff] [blame] | 78 | |
Christian Brabandt | db510ca | 2023-09-03 09:23:12 +0200 | [diff] [blame] | 79 | call delete('X_crash1_result.txt') |
Christian Brabandt | e1dc9a6 | 2023-09-02 14:40:13 +0200 | [diff] [blame] | 80 | endfunc |
| 81 | |
Christian Brabandt | ced2c73 | 2023-09-02 21:15:52 +0200 | [diff] [blame] | 82 | func Test_crash2() |
| 83 | " The following used to crash Vim |
| 84 | let opts = #{wait_for_ruler: 0, rows: 20} |
| 85 | let args = ' -u NONE -i NONE -n -e -s -S ' |
| 86 | let buf = RunVimInTerminal(args .. ' crash/vim_regsub_both', opts) |
| 87 | call VerifyScreenDump(buf, 'Test_crash_01', {}) |
| 88 | exe buf .. "bw!" |
| 89 | endfunc |
| 90 | |
Christian Brabandt | e1dc9a6 | 2023-09-02 14:40:13 +0200 | [diff] [blame] | 91 | " vim: shiftwidth=2 sts=2 expandtab |