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 #6312,
            closes #6149)
diff --git a/src/testdir/test_registers.vim b/src/testdir/test_registers.vim
index c913562..d92ad97 100644
--- a/src/testdir/test_registers.vim
+++ b/src/testdir/test_registers.vim
@@ -641,4 +641,22 @@
   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
index b383830..d6ed2cd 100644
--- a/src/version.c
+++ b/src/version.c
@@ -755,6 +755,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1039,
+/**/
     1038,
 /**/
     1037,
diff --git a/src/winclip.c b/src/winclip.c
index 767bf1c..db88e67 100644
--- a/src/winclip.c
+++ b/src/winclip.c
@@ -422,7 +422,7 @@
 	}
     }
 
-    if (str != NULL && *str != NUL)
+    if (str != NULL && metadata.txtlen != 0)
     {
 	char_u *temp_clipboard;
 
@@ -543,7 +543,7 @@
 
 	if (lpszMem)
 	{
-	    vim_strncpy((char_u *)lpszMem, str, metadata.txtlen);
+	    mch_memmove((char_u *)lpszMem, str, metadata.txtlen);
 	    GlobalUnlock(hMem);
 	}
     }