Permalink
Browse files

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)
  • Loading branch information...
brammool committed Jun 16, 2018
1 parent 52d3aae commit 43dee181f596c81b99e200b6cdfeb02ecfed42c8
Showing with 33 additions and 8 deletions.
  1. +9 −1 src/hardcopy.c
  2. +22 −7 src/testdir/test_hardcopy.vim
  3. +2 −0 src/version.c
@@ -3372,8 +3372,9 @@ mch_print_start_line(int margin, int page_line)
}
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 UNUSED)
#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)
{
@@ -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
@@ -761,6 +761,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
56,
/**/
55,
/**/

0 comments on commit 43dee18

Please sign in to comment.