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 |
Christian Brabandt | 623ba31 | 2023-09-04 22:09:12 +0200 | [diff] [blame] | 43 | call TermWait(buf, 1000) |
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 | 6e60cf4 | 2023-09-03 21:43:46 +0200 | [diff] [blame] | 52 | let file = 'crash/bt_quickfix1_poc' |
| 53 | let args = printf(cmn_args, vim, file) |
| 54 | call term_sendkeys(buf, args .. |
| 55 | \ ' && echo "crash 6: [OK]" >> X_crash1_result.txt' .. "\<cr>") |
| 56 | " clean up |
| 57 | call delete('X') |
Christian Brabandt | 623ba31 | 2023-09-04 22:09:12 +0200 | [diff] [blame] | 58 | call TermWait(buf, 1000) |
Christian Brabandt | 6e60cf4 | 2023-09-03 21:43:46 +0200 | [diff] [blame] | 59 | |
Christian Brabandt | db510ca | 2023-09-03 09:23:12 +0200 | [diff] [blame] | 60 | " clean up |
Christian Brabandt | e1dc9a6 | 2023-09-02 14:40:13 +0200 | [diff] [blame] | 61 | exe buf .. "bw!" |
| 62 | |
Christian Brabandt | db510ca | 2023-09-03 09:23:12 +0200 | [diff] [blame] | 63 | sp X_crash1_result.txt |
Christian Brabandt | fc68299 | 2023-09-03 20:20:52 +0200 | [diff] [blame] | 64 | |
| 65 | let expected = [ |
| 66 | \ 'crash 1: [OK]', |
| 67 | \ 'crash 2: [OK]', |
| 68 | \ 'crash 3: [OK]', |
| 69 | \ 'crash 4: [OK]', |
Christian Brabandt | ee9166e | 2023-09-03 21:24:33 +0200 | [diff] [blame] | 70 | \ 'crash 5: [OK]', |
Christian Brabandt | 6e60cf4 | 2023-09-03 21:43:46 +0200 | [diff] [blame] | 71 | \ 'crash 6: [OK]', |
Christian Brabandt | fc68299 | 2023-09-03 20:20:52 +0200 | [diff] [blame] | 72 | \ ] |
| 73 | |
| 74 | call assert_equal(expected, getline(1, '$')) |
Christian Brabandt | db510ca | 2023-09-03 09:23:12 +0200 | [diff] [blame] | 75 | bw! |
Christian Brabandt | e1dc9a6 | 2023-09-02 14:40:13 +0200 | [diff] [blame] | 76 | |
Christian Brabandt | db510ca | 2023-09-03 09:23:12 +0200 | [diff] [blame] | 77 | call delete('X_crash1_result.txt') |
Christian Brabandt | e1dc9a6 | 2023-09-02 14:40:13 +0200 | [diff] [blame] | 78 | endfunc |
| 79 | |
Christian Brabandt | ced2c73 | 2023-09-02 21:15:52 +0200 | [diff] [blame] | 80 | func Test_crash2() |
| 81 | " The following used to crash Vim |
| 82 | let opts = #{wait_for_ruler: 0, rows: 20} |
| 83 | let args = ' -u NONE -i NONE -n -e -s -S ' |
| 84 | let buf = RunVimInTerminal(args .. ' crash/vim_regsub_both', opts) |
| 85 | call VerifyScreenDump(buf, 'Test_crash_01', {}) |
| 86 | exe buf .. "bw!" |
| 87 | endfunc |
| 88 | |
Christian Brabandt | e1dc9a6 | 2023-09-02 14:40:13 +0200 | [diff] [blame] | 89 | " vim: shiftwidth=2 sts=2 expandtab |