changeset 14077:873542706b0b v8.1.0056

patch 8.1.0056: crash when using :hardcopy with illegal byte commit https://github.com/vim/vim/commit/43dee181f596c81b99e200b6cdfeb02ecfed42c8 Author: Bram Moolenaar <Bram@vim.org> 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)
author Christian Brabandt <cb@256bit.org>
date Sat, 16 Jun 2018 14:45:05 +0200
parents c3ec29c00689
children 7d731c628c83
files src/hardcopy.c src/testdir/test_hardcopy.vim src/version.c
diffstat 3 files changed, 33 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- 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)
     {
--- 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
+
--- 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,