changeset 20976:599b29b6e540 v8.2.1039

patch 8.2.1039: cannot put NUL byte on clipboard Commit: https://github.com/vim/vim/commit/25fd2672875351ff56a925284a03a900081f70c0 Author: Bram Moolenaar <Bram@vim.org> Date: Mon Jun 22 20:30:27 2020 +0200 patch 8.2.1039: cannot put NUL byte on clipboard Problem: Cannot put NUL byte on clipboard. Solution: Use the text length. (Christian Brabandt, closes https://github.com/vim/vim/issues/6312, closes #6149)
author Bram Moolenaar <Bram@vim.org>
date Mon, 22 Jun 2020 20:45:03 +0200
parents d25769ea2be3
children 6953733825a7
files src/testdir/test_registers.vim src/version.c src/winclip.c
diffstat 3 files changed, 22 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/testdir/test_registers.vim
+++ b/src/testdir/test_registers.vim
@@ -641,4 +641,22 @@ func Test_execute_reg_as_ex_cmd()
   call assert_equal(repeat('abcdefghijklmnopqrstuvwxyz', 312), str)
 endfunc
 
+" Test for clipboard registers with ASCII NUL
+func Test_clipboard_nul()
+  CheckFeature clipboard_working
+  new
+
+  " Test for putting ASCII NUL into the clipboard
+  set clipboard=unnamed
+  call append(0, "\ntest")
+  normal ggyyp
+  call assert_equal("^@test^@", strtrans(getreg('*')))
+  call assert_equal(getline(1), getline(2))
+  let b = split(execute(":reg *"), "\n")
+  call assert_match('"\*\s*\^@test\^J',b[1])
+
+  set clipboard&vim
+  bwipe!
+endfunc
+
 " vim: shiftwidth=2 sts=2 expandtab
--- a/src/version.c
+++ b/src/version.c
@@ -755,6 +755,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1039,
+/**/
     1038,
 /**/
     1037,
--- a/src/winclip.c
+++ b/src/winclip.c
@@ -422,7 +422,7 @@ clip_mch_request_selection(Clipboard_T *
 	}
     }
 
-    if (str != NULL && *str != NUL)
+    if (str != NULL && metadata.txtlen != 0)
     {
 	char_u *temp_clipboard;
 
@@ -543,7 +543,7 @@ clip_mch_set_selection(Clipboard_T *cbd)
 
 	if (lpszMem)
 	{
-	    vim_strncpy((char_u *)lpszMem, str, metadata.txtlen);
+	    mch_memmove((char_u *)lpszMem, str, metadata.txtlen);
 	    GlobalUnlock(hMem);
 	}
     }