]> git.wh0rd.org Git - nano.git/commitdiff
Updating 'mark_begin' when mark and cursor are on the same line.
authorBenno Schulenberg <bensberg@justemail.net>
Sat, 22 Feb 2014 16:46:27 +0000 (16:46 +0000)
committerBenno Schulenberg <bensberg@justemail.net>
Sat, 22 Feb 2014 16:46:27 +0000 (16:46 +0000)
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@4591 35c25a1d-7b9e-4130-9fde-d3aeb78583b8

ChangeLog
src/nano.c

index b6f4c1e84276649af9b78b4161dc9c09623a3878..2a3ec1e7424515aedd2c5aafe7402bbc61c1d084 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2014-02-22  Benno Schulenberg  <bensberg@justemail.net>
+       * src/nano.c (move_to_filestruct) - Update the data in 'mark_begin'
+       when mark and cursor are on the same line.  This avoids a segfault
+       after M-A, right, M-T, left, ^K, or a hang when the left is left out.
+
 2014-02-22  Benno Schulenberg  <bensberg@justemail.net>
        * src/nano.c (main) - Add two conditions on ENABLE_NANORC.
        * src/files.c (close_buffer, do_insertfile) - Likewise.
index a2b5d5d47828d11cae6407731bc9351d6d53b6a1..51545ebf7e4c8e795ee438c178e8b3762a79c801 100644 (file)
@@ -297,6 +297,7 @@ void move_to_filestruct(filestruct **file_top, filestruct **file_bot,
     bool edittop_inside;
 #ifndef NANO_TINY
     bool mark_inside = FALSE;
+    bool same_line = FALSE;
 #endif
 
     assert(file_top != NULL && file_bot != NULL && top != NULL && bot != NULL);
@@ -314,7 +315,7 @@ void move_to_filestruct(filestruct **file_top, filestruct **file_bot,
        openfile->fileage->lineno && openfile->edittop->lineno <=
        openfile->filebot->lineno);
 #ifndef NANO_TINY
-    if (openfile->mark_set)
+    if (openfile->mark_set) {
        mark_inside = (openfile->mark_begin->lineno >=
                openfile->fileage->lineno &&
                openfile->mark_begin->lineno <=
@@ -323,6 +324,8 @@ void move_to_filestruct(filestruct **file_top, filestruct **file_bot,
                openfile->mark_begin_x >= top_x) &&
                (openfile->mark_begin != openfile->filebot ||
                openfile->mark_begin_x <= bot_x));
+       same_line = (openfile->mark_begin == openfile->fileage);
+    }
 #endif
 
     /* Get the number of characters in the text, and subtract it from
@@ -382,7 +385,9 @@ void move_to_filestruct(filestruct **file_top, filestruct **file_bot,
     if (mark_inside) {
        openfile->mark_begin = openfile->current;
        openfile->mark_begin_x = openfile->current_x;
-    }
+    } else if (same_line)
+       /* update the content of this partially cut line */
+       openfile->mark_begin = openfile->current;
 #endif
 
     top_save = openfile->fileage;