patch 9.0.0164: using freed memory with put command

Problem:    Using freed memory with put command.
Solution:   Get byte offset before replacing the line.
diff --git a/src/register.c b/src/register.c
index f34a0dd..2dafeab 100644
--- a/src/register.c
+++ b/src/register.c
@@ -2099,13 +2099,15 @@
 			ptr += yanklen;
 		    }
 		    STRMOVE(ptr, oldp + col);
-		    ml_replace(lnum, newp, FALSE);
-
-		    inserted_bytes(lnum, col, totlen);
 
 		    // compute the byte offset for the last character
 		    first_byte_off = mb_head_off(newp, ptr - 1);
 
+		    // Note: this may free "newp"
+		    ml_replace(lnum, newp, FALSE);
+
+		    inserted_bytes(lnum, col, totlen);
+
 		    // Place cursor on last putted char.
 		    if (lnum == curwin->w_cursor.lnum)
 		    {
diff --git a/src/version.c b/src/version.c
index 9207b7f..be59f1b 100644
--- a/src/version.c
+++ b/src/version.c
@@ -736,6 +736,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    164,
+/**/
     163,
 /**/
     162,