]> git.wh0rd.org Git - nano.git/commitdiff
Backport of r5304 and r5307 from trunk.
authorChris Allegretta <chrisa@asty.org>
Sun, 15 Nov 2015 06:28:19 +0000 (06:28 +0000)
committerChris Allegretta <chrisa@asty.org>
Sun, 15 Nov 2015 06:28:19 +0000 (06:28 +0000)
git-svn-id: svn://svn.savannah.gnu.org/nano/branches/nano_2_4_branch@5408 35c25a1d-7b9e-4130-9fde-d3aeb78583b8

ChangeLog
src/files.c
src/winio.c

index 2208116a562647799289de2b55ad7a64972ec1e1..66c1a8074bcfbf10391841cdcd440da3c02a2bc4 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,22 @@
+2015-07-18  Benno Schulenberg  <bensberg@justemail.net>
+       * src/winio.c (edit_draw): When looking for multiline-regex matches,
+       look for a new start only after an end, instead of right after the
+       last start.  This fixes bug #45525 and bug #41313 on Savannah.
+
+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-13  Benno Schulenberg  <bensberg@justemail.net>
+       * src/files.c (replace_buffer): Prevent a segfault when spellchecking
+       a marked region and nonewlines isn't set.
+
 2015-07-10  Benno Schulenberg  <bensberg@justemail.net>
-       * src/nano.c (delete_opennode): Plug a small memory leak.
+       * src/nano.c (delete_opennode): Plug a small memory leak.
 
 2015-06-28  Benno Schulenberg  <bensberg@justemail.net>
        * src/global.c (add_to_sclist), src/help.c (help_init), src/nano.h,
index ca8848ff762a88f58a309186fe3b8c3d7a398d56..582ef71423aeea034161bfb0ae96e8a2e4d6d359 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 loading into a new buffer, add a new entry to
      * openfile. */
     if (new_buffer) {
@@ -420,6 +435,9 @@ void replace_buffer(const char *filename)
     /* If opening the file succeeded, read it in. */
     if (descriptor > 0)
        read_file(f, descriptor, filename, FALSE, TRUE);
+
+    /* Put current at a place that is certain to exist. */
+    openfile->current = openfile->fileage;
 }
 #endif /* !DISABLE_SPELLER */
 
index c152b64c19f56b36be6b2780425cb34e53bcc547..614d0746e0b81566b9eadd1447358847b8da1912 100644 (file)
@@ -2603,7 +2603,8 @@ void edit_draw(filestruct *fileptr, const char *converted, int
                /* If the found start has been qualified as an end earlier,
                 * believe it and skip to the next step. */
                if (start_line != NULL && start_line->multidata != NULL &&
-                       start_line->multidata[tmpcolor->id] == CBEGINBEFORE)
+                       (start_line->multidata[tmpcolor->id] == CBEGINBEFORE ||
+                       start_line->multidata[tmpcolor->id] == CSTARTENDHERE))
                    goto step_two;
 
                /* Skip over a zero-length regex match. */
@@ -2678,8 +2679,9 @@ void edit_draw(filestruct *fileptr, const char *converted, int
                    if (paintlen < 0)
                        goto end_of_loop;
   step_two:
-                   /* Second step, we look for starts on this line. */
-                   start_col = 0;
+                   /* Second step: look for starts on this line, but start
+                    * looking only after an end match, if there is one. */
+                   start_col = (paintlen == 0) ? 0 : endmatch.rm_eo;
 
                    while (start_col < endpos) {
                        if (regexec(tmpcolor->start, fileptr->data +
@@ -2728,6 +2730,7 @@ void edit_draw(filestruct *fileptr, const char *converted, int
 #endif
                                }
                            }
+                           start_col = endmatch.rm_eo;
                        } else {
                            /* There is no end on this line.  But we
                             * haven't yet looked for one on later
@@ -2753,8 +2756,8 @@ void edit_draw(filestruct *fileptr, const char *converted, int
                                fileptr->multidata[tmpcolor->id] = CENDAFTER;
                                break;
                            }
+                           start_col = startmatch.rm_so + 1;
                        }
-                       start_col = startmatch.rm_so + 1;
                    }
                }
            }