From 8db126b09de70a59f7ee34fcb8c9c663eb6d4469 Mon Sep 17 00:00:00 2001 From: David Lawrence Ramsey Date: Mon, 27 Nov 2006 05:03:54 +0000 Subject: [PATCH] in write_file(), properly handle filenames that contain nulls git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@3975 35c25a1d-7b9e-4130-9fde-d3aeb78583b8 --- ChangeLog | 4 +++- src/files.c | 12 +++++++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 564d0ecb..979746c3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -3,8 +3,10 @@ CVS code - - Miscellaneous comment fixes. (DLR) - files.c: do_insertfile() - - Properly handle files and executable commands that contain + - Properly handle filenames and executable commands that contain nulls. (DLR) + write_file() + - Properly handle filenames that contain nulls. (DLR) - nano.h: - Rename NANO_ALT_REPLACE_KEY to NANO_REPLACE_ALTKEY, for consistency. (DLR) diff --git a/src/files.c b/src/files.c index c22b5d33..dd32130b 100644 --- a/src/files.c +++ b/src/files.c @@ -1275,7 +1275,7 @@ int write_file(const char *name, FILE *f_open, bool tmp, append_type int retval = -1; /* Instead of returning in this function, you should always * merely set retval and then goto cleanup_and_exit. */ - size_t lineswritten = 0; + size_t name_len, lineswritten = 0; const filestruct *fileptr = openfile->fileage; int fd; /* The file descriptor we use. */ @@ -1310,8 +1310,18 @@ int write_file(const char *name, FILE *f_open, bool tmp, append_type if (!tmp) titlebar(NULL); + name_len = strlen(name); + + /* Convert newlines to nulls, just before we get the real + * filename. */ + sunder(name); + realname = real_dir_from_tilde(name); + /* Convert nulls to newlines. name_len is the string's real + * length. */ + unsunder(name, name_len); + #ifndef DISABLE_OPERATINGDIR /* If we're writing a temporary file, we're probably going outside * the operating directory, so skip the operating directory test. */