patch 8.2.3006: crash when echoing a value very early

Problem:    Crash when echoing a value very early. (Naruhiko Nishino)
Solution:   Do not use a NUL to truncate the message, make a copy.
            (closes #8388)
diff --git a/src/message.c b/src/message.c
index f2fe23b..cb713d7 100644
--- a/src/message.c
+++ b/src/message.c
@@ -2751,19 +2751,21 @@
 
     if (*p != NUL && !(silent_mode && p_verbose == 0))
     {
-	int c = -1;
+	char_u *tofree = NULL;
 
 	if (maxlen > 0 && STRLEN(p) > (size_t)maxlen)
 	{
-	    c = p[maxlen];
-	    p[maxlen] = 0;
+	    tofree = vim_strnsave(p, (size_t)maxlen);
+	    p = tofree;
 	}
-	if (info_message)
-	    mch_msg((char *)p);
-	else
-	    mch_errmsg((char *)p);
-	if (c != -1)
-	    p[maxlen] = c;
+	if (p != NULL)
+	{
+	    if (info_message)
+		mch_msg((char *)p);
+	    else
+		mch_errmsg((char *)p);
+	    vim_free(tofree);
+	}
     }
 
     msg_didout = TRUE;	    // assume that line is not empty