nano

nano with my custom patches
git clone git://bsandro.tech/nano
Log | Files | Refs | README | LICENSE

commit 8db126b09de70a59f7ee34fcb8c9c663eb6d4469
parent d97649859dc9058443bcb77f3abdf94877240b01
Author: David Lawrence Ramsey <pooka109@gmail.com>
Date:   Mon, 27 Nov 2006 05:03:54 +0000

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

Diffstat:
MChangeLog | 4+++-
Msrc/files.c | 12+++++++++++-
2 files changed, 14 insertions(+), 2 deletions(-)

diff --git 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 @@ -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. */