diff options
author | Jan Edmund Lazo <janedmundlazo@hotmail.com> | 2018-07-19 12:16:21 -0400 |
---|---|---|
committer | Jan Edmund Lazo <janedmundlazo@hotmail.com> | 2018-07-19 12:21:14 -0400 |
commit | 8441af37d84147f1b32d91ed9a496a57472861ef (patch) | |
tree | 85da4d4413d7a5e4f04e6f019a5ca6a6b819fa28 /src | |
parent | 2ea619c10b28f908279832f87fb30121aaca7f5a (diff) | |
download | rneovim-8441af37d84147f1b32d91ed9a496a57472861ef.tar.gz rneovim-8441af37d84147f1b32d91ed9a496a57472861ef.tar.bz2 rneovim-8441af37d84147f1b32d91ed9a496a57472861ef.zip |
vim-patch:8.1.0056: crash when using :hardcopy with illegal byte
Problem: Crash when using :hardcopy with illegal byte.
Solution: Check for string_convert() returning NULL. (Dominique Pelle)
https://github.com/vim/vim/commit/43dee181f596c81b99e200b6cdfeb02ecfed42c8
Diffstat (limited to 'src')
-rw-r--r-- | src/nvim/hardcopy.c | 7 | ||||
-rw-r--r-- | src/nvim/testdir/test_hardcopy.vim | 29 |
2 files changed, 28 insertions, 8 deletions
diff --git a/src/nvim/hardcopy.c b/src/nvim/hardcopy.c index 70332fec86..972ccbb811 100644 --- a/src/nvim/hardcopy.c +++ b/src/nvim/hardcopy.c @@ -2882,8 +2882,9 @@ void mch_print_start_line(int margin, int page_line) prt_half_width = FALSE; } -int mch_print_text_out(char_u *p, size_t len) +int mch_print_text_out(char_u *textp, size_t len) { + char_u *p = textp; int need_break; char_u ch; char_u ch_buff[8]; @@ -2996,6 +2997,10 @@ int mch_print_text_out(char_u *p, size_t len) if (prt_do_conv) { // Convert from multi-byte to 8-bit encoding tofree = p = string_convert(&prt_conv, p, &len); + if (p == NULL) { + p = (char_u *)""; + len = 0; + } } if (prt_out_mbyte) { diff --git a/src/nvim/testdir/test_hardcopy.vim b/src/nvim/testdir/test_hardcopy.vim index f630556bef..ced13b107c 100644 --- a/src/nvim/testdir/test_hardcopy.vim +++ b/src/nvim/testdir/test_hardcopy.vim @@ -63,12 +63,27 @@ func Test_with_syntax() endfunc func Test_fname_with_spaces() - if has('postscript') - split t\ e\ s\ t.txt - call setline(1, ['just', 'some', 'text']) - hardcopy > %.ps - call assert_true(filereadable('t e s t.txt.ps')) - call delete('t e s t.txt.ps') - bwipe! + if !has('postscript') + return + endif + split t\ e\ s\ t.txt + call setline(1, ['just', 'some', 'text']) + hardcopy > %.ps + call assert_true(filereadable('t e s t.txt.ps')) + call delete('t e s t.txt.ps') + bwipe! +endfunc + +func Test_illegal_byte() + if !has('postscript') || &enc != 'utf-8' + return endif + new + " conversion of 0xff will fail, this used to cause a crash + call setline(1, "\xff") + hardcopy >Xpstest + + bwipe! + call delete('Xpstest') endfunc + |