# HG changeset patch # User Bram Moolenaar # Date 1592851503 -7200 # Node ID 599b29b6e540ff12f9286a93f62d53c447022887 # Parent d25769ea2be345309b9a2b72d497c4fd31d387a6 patch 8.2.1039: cannot put NUL byte on clipboard Commit: https://github.com/vim/vim/commit/25fd2672875351ff56a925284a03a900081f70c0 Author: Bram Moolenaar 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) diff --git a/src/testdir/test_registers.vim b/src/testdir/test_registers.vim --- 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 diff --git a/src/version.c b/src/version.c --- 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, diff --git a/src/winclip.c b/src/winclip.c --- 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); } }