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
This commit is contained in:
12
src/files.c
12
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. */
|
||||
|
||||
Reference in New Issue
Block a user