commit 98ffb642f376f77243a8ab921d6cdee0cbb0d349
parent 8cde95e1704915ca0f9ae3a7b9cb82ea29b610af
Author: Benno Schulenberg <bensberg@justemail.net>
Date: Fri, 17 Jul 2015 20:40:44 +0000
Verifying that a named and existing file is a normal file, to avoid
opening an empty buffer when the name of a directory is specified.
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@5304 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
Diffstat:
2 files changed, 22 insertions(+), 0 deletions(-)
diff --git a/ChangeLog b/ChangeLog
@@ -1,3 +1,10 @@
+2015-07-17 Benno Schulenberg <bensberg@justemail.net>
+ * src/files.c (open_buffer): Verify that a named and existing file
+ is a normal file, to avoid opening an empty buffer when the name of
+ a directory is specified. This fixes Savannah bug #45383 reported
+ by Mike Frysinger, and also Savannah bug #27839 (which is an echo
+ from Debian bug #551717 reported by Paul Wise).
+
2015-07-17 Mike Frysinger <vapier@gentoo.org>
* src/browser.c (browser_refresh): Use the proper type (off_t) for
the size of a file, and avoid warnings about too large bit shifts.
diff --git a/src/files.c b/src/files.c
@@ -339,6 +339,21 @@ void open_buffer(const char *filename, bool undoable)
}
#endif
+ /* When the specified filename is not empty, and the thing exists,
+ * verify that it is a normal file. */
+ if (strcmp(filename, "") != 0) {
+ struct stat fileinfo;
+
+ if (stat(filename, &fileinfo) == 0 && !S_ISREG(fileinfo.st_mode)) {
+ if (S_ISDIR(fileinfo.st_mode))
+ statusbar(_("\"%s\" is a directory"), filename);
+ else
+ statusbar(_("\"%s\" is not a normal file"), filename);
+ beep();
+ return;
+ }
+ }
+
/* If we're going to load into a new buffer, first create the new
* buffer and lock the corresponding file. */
if (new_buffer) {