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)
43dee181f5
This commit is contained in:
Jan Edmund Lazo 2018-07-19 12:16:21 -04:00
parent 2ea619c10b
commit 8441af37d8
2 changed files with 28 additions and 8 deletions

View File

@ -2882,8 +2882,9 @@ void mch_print_start_line(int margin, int page_line)
prt_half_width = FALSE; 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; int need_break;
char_u ch; char_u ch;
char_u ch_buff[8]; char_u ch_buff[8];
@ -2996,6 +2997,10 @@ int mch_print_text_out(char_u *p, size_t len)
if (prt_do_conv) { if (prt_do_conv) {
// Convert from multi-byte to 8-bit encoding // Convert from multi-byte to 8-bit encoding
tofree = p = string_convert(&prt_conv, p, &len); tofree = p = string_convert(&prt_conv, p, &len);
if (p == NULL) {
p = (char_u *)"";
len = 0;
}
} }
if (prt_out_mbyte) { if (prt_out_mbyte) {

View File

@ -63,12 +63,27 @@ func Test_with_syntax()
endfunc endfunc
func Test_fname_with_spaces() func Test_fname_with_spaces()
if has('postscript') if !has('postscript')
return
endif
split t\ e\ s\ t.txt split t\ e\ s\ t.txt
call setline(1, ['just', 'some', 'text']) call setline(1, ['just', 'some', 'text'])
hardcopy > %.ps hardcopy > %.ps
call assert_true(filereadable('t e s t.txt.ps')) call assert_true(filereadable('t e s t.txt.ps'))
call delete('t e s t.txt.ps') call delete('t e s t.txt.ps')
bwipe! bwipe!
endif
endfunc 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