]> git.wh0rd.org Git - nano.git/commitdiff
Verifying that a named and existing file is a normal file, to avoid
authorBenno Schulenberg <bensberg@justemail.net>
Fri, 17 Jul 2015 20:40:44 +0000 (20:40 +0000)
committerBenno Schulenberg <bensberg@justemail.net>
Fri, 17 Jul 2015 20:40:44 +0000 (20:40 +0000)
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

ChangeLog
src/files.c

index e5acf35546446ac1e1704321d325f1a702e6e9bb..61fb69accb362d032345a51cacece29b8146535d 100644 (file)
--- 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.
index 2198fac203047822f9eabfcaed6a3f6d4ffa3e0c..4c491fd1a1d80e34cfba16023322ecc9be59dc11 100644 (file)
@@ -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) {