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