mirror of
git://git.sv.gnu.org/nano.git
synced 2024-11-22 04:41:21 +03:00
in copy_from_file(), fix potential segfault after uncutting one line of
text with the mark on by properly preserving the beginning of the mark; also, make sure the mark is always properly positioned after uncutting one line of text with the mark on git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@4141 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
This commit is contained in:
parent
884ca5373b
commit
d1ab89a929
@ -1,3 +1,11 @@
|
||||
2007-08-07 David Lawrence Ramsey <pooka109@gmail.com>
|
||||
|
||||
* nano.c (copy_from_file): Fix potential segfault, found by Paul
|
||||
Goins, after uncutting one line of text with the mark on by
|
||||
properly preserving the beginning of the mark.
|
||||
* nano.c (copy_from_file): Make sure the mark is always properly
|
||||
positioned after uncutting one line of text with the mark on.
|
||||
|
||||
2007-08-01 David Lawrence Ramsey <pooka109@gmail.com>
|
||||
|
||||
* nano.c (version): Display copyright notices.
|
||||
|
27
src/nano.c
27
src/nano.c
@ -394,9 +394,22 @@ void copy_from_filestruct(filestruct *file_top, filestruct *file_bot)
|
||||
{
|
||||
filestruct *top_save;
|
||||
bool edittop_inside;
|
||||
#ifndef NANO_TINY
|
||||
bool right_side_up = FALSE;
|
||||
#endif
|
||||
|
||||
assert(file_top != NULL && file_bot != NULL);
|
||||
|
||||
#ifndef NANO_TINY
|
||||
if (openfile->mark_set) {
|
||||
filestruct *top, *bot;
|
||||
size_t top_x, bot_x;
|
||||
|
||||
mark_order((const filestruct **)&top, &top_x,
|
||||
(const filestruct **)&bot, &bot_x, &right_side_up);
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Partition the filestruct so that it contains no text, and keep
|
||||
* track of whether the top of the edit window is inside the
|
||||
* partition. */
|
||||
@ -411,11 +424,21 @@ void copy_from_filestruct(filestruct *file_top, filestruct *file_bot)
|
||||
while (openfile->filebot->next != NULL)
|
||||
openfile->filebot = openfile->filebot->next;
|
||||
|
||||
/* Restore the current line and cursor position. */
|
||||
/* Restore the current line and cursor position. If the mark begins
|
||||
* inside the partition, adjust the mark coordinates to compensate
|
||||
* for the change in the current line. */
|
||||
openfile->current = openfile->filebot;
|
||||
openfile->current_x = strlen(openfile->filebot->data);
|
||||
if (openfile->fileage == openfile->filebot)
|
||||
if (openfile->fileage == openfile->filebot) {
|
||||
#ifndef NANO_TINY
|
||||
if (openfile->mark_set) {
|
||||
openfile->mark_begin = openfile->current;
|
||||
if (!right_side_up)
|
||||
openfile->mark_begin_x += openfile->current_x;
|
||||
}
|
||||
#endif
|
||||
openfile->current_x += strlen(filepart->top_data);
|
||||
}
|
||||
|
||||
/* Get the number of characters in the copied text, and add it to
|
||||
* totsize. */
|
||||
|
Loading…
Reference in New Issue
Block a user