# HG changeset patch # User Christian Brabandt # Date 1529153105 -7200 # Node ID 873542706b0b98f153d3b1aa32557fd6e7547de2 # Parent c3ec29c00689570961f3c472abcb9cc2606e58c3 patch 8.1.0056: crash when using :hardcopy with illegal byte commit https://github.com/vim/vim/commit/43dee181f596c81b99e200b6cdfeb02ecfed42c8 Author: Bram Moolenaar Date: Sat Jun 16 14:44:11 2018 +0200 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) diff --git a/src/hardcopy.c b/src/hardcopy.c --- a/src/hardcopy.c +++ b/src/hardcopy.c @@ -3372,8 +3372,9 @@ mch_print_start_line(int margin, int pag } int -mch_print_text_out(char_u *p, int len UNUSED) +mch_print_text_out(char_u *textp, int len UNUSED) { + char_u *p = textp; int need_break; char_u ch; char_u ch_buff[8]; @@ -3508,8 +3509,15 @@ mch_print_text_out(char_u *p, int len UN #ifdef FEAT_MBYTE 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/testdir/test_hardcopy.vim b/src/testdir/test_hardcopy.vim --- a/src/testdir/test_hardcopy.vim +++ b/src/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 + diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -762,6 +762,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 56, +/**/ 55, /**/ 54,