diff --git a/ChangeLog b/ChangeLog
index 0fea0a7e737b132326ea968344119c6916de79be..134220563baa76910d696574d1102b22f6f57dc0 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2016-02-25  Benno Schulenberg  <bensberg@justemail.net>
+	* src/browser.c (do_browser): Plug a memory leak by not copying
+	a string twice.  This fixes Savannah bug #47206.
+
 2016-02-23  Benno Schulenberg  <bensberg@justemail.net>
 	* src/prompt.c (do_statusbar_output, do_statusbar_delete):
 	Rename a variable, for contrast and correctness.
diff --git a/src/browser.c b/src/browser.c
index 857bec5dc61a37da8719a00dbf03754d5e43c4eb..5232733c72c1f03d8f5a637e8f7ea4dac6fdcc2f 100644
--- a/src/browser.c
+++ b/src/browser.c
@@ -322,7 +322,7 @@ char *do_browser(char *path, DIR *dir)
 		/* We've successfully opened the parent directory,
 		 * save the current directory in prev_dir, so that
 		 * we can easily return to it by hitting Enter. */
-		prev_dir = mallocstrcpy(NULL, striponedir(filelist[selected]));
+		prev_dir = striponedir(filelist[selected]);
 
 	    dir = opendir(filelist[selected]);
 	    if (dir == NULL) {
@@ -330,6 +330,8 @@ char *do_browser(char *path, DIR *dir)
 		 * Complain. */
 		statusbar(_("Error reading %s: %s"),
 				filelist[selected], strerror(errno));
+		free(prev_dir);
+		prev_dir = NULL;
 		beep();
 		continue;
 	    }