Use full path in undofile().  Updated docs.
diff --git a/src/eval.c b/src/eval.c
index 6ad71d5..e777d32 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -17639,8 +17639,13 @@
 {
     rettv->v_type = VAR_STRING;
 #ifdef FEAT_PERSISTENT_UNDO
-    rettv->vval.v_string = u_get_undo_file_name(get_tv_string(&argvars[0]),
-								       FALSE);
+    {
+	char_u *ffname = FullName_save(get_tv_string(&argvars[0]), FALSE);
+
+	if (ffname != NULL)
+	    rettv->vval.v_string = u_get_undo_file_name(ffname, FALSE);
+	vim_free(ffname);
+    }
 #else
     rettv->vval.v_string = NULL;
 #endif
diff --git a/src/memfile.c b/src/memfile.c
index bd03e65..5412a61 100644
--- a/src/memfile.c
+++ b/src/memfile.c
@@ -234,7 +234,7 @@
 }
 
 /*
- * close a memory file and delete the associated file if 'del_file' is TRUE
+ * Close a memory file and delete the associated file if 'del_file' is TRUE.
  */
     void
 mf_close(mfp, del_file)
@@ -415,7 +415,8 @@
      * Init the data to all zero, to avoid reading uninitialized data.
      * This also avoids that the passwd file ends up in the swap file!
      */
-    (void)vim_memset((char *)(hp->bh_data), 0, (size_t)mfp->mf_page_size);
+    (void)vim_memset((char *)(hp->bh_data), 0,
+				      (size_t)mfp->mf_page_size * page_count);
 
     return hp;
 }