]> granicus.if.org Git - vim/commitdiff
patch 8.1.0056: crash when using :hardcopy with illegal byte v8.1.0056
authorBram Moolenaar <Bram@vim.org>
Sat, 16 Jun 2018 12:44:11 +0000 (14:44 +0200)
committerBram Moolenaar <Bram@vim.org>
Sat, 16 Jun 2018 12:44:11 +0000 (14:44 +0200)
Problem:    Crash when using :hardcopy with illegal byte.
Solution:   Check for string_convert() returning NULL. (Dominique Pelle)

src/hardcopy.c
src/testdir/test_hardcopy.vim
src/version.c

index 91f62c39f3ded104c7158a329cd9f6bf74cecb10..420ceb7638bf4c22043d873c076b53cf83c397e3 100644 (file)
@@ -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)
     {
index f630556bef950239d852c949b13a18e82bf752c4..ced13b107c2a47fc767d9dbc739ac8d4a9c3c7e2 100644 (file)
@@ -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
+
index 8d58649031890b79b80edeea4c06b17d38ac1bf3..bd8efafeb380096ef55d325a304131ba889e256f 100644 (file)
@@ -761,6 +761,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    56,
 /**/
     55,
 /**/