diff options
Diffstat (limited to 'app-editors/nano/files/nano-2.1.6-cut-paste-segv.patch')
-rw-r--r-- | app-editors/nano/files/nano-2.1.6-cut-paste-segv.patch | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/app-editors/nano/files/nano-2.1.6-cut-paste-segv.patch b/app-editors/nano/files/nano-2.1.6-cut-paste-segv.patch new file mode 100644 index 000000000000..aab3643bb9a2 --- /dev/null +++ b/app-editors/nano/files/nano-2.1.6-cut-paste-segv.patch @@ -0,0 +1,70 @@ +https://savannah.gnu.org/bugs/?24447 + +commit af3b86f16fc3e3f07a1d067528ecd84dd72a58d2 +Author: astyanax <astyanax@35c25a1d-7b9e-4130-9fde-d3aeb78583b8> +Date: Sat Oct 4 11:10:11 2008 +0000 + + 2008-10-04 Chris Allegretta <chrisa@asty.org> + * cut.c (Add_undo): Save last cut undo information so it can be used for next uncut, fixes + Savannah bug 24183. + + + + git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@4338 35c25a1d-7b9e-4130-9fde-d3aeb78583b8 + +diff --git a/ChangeLog b/ChangeLog +index 98e9253..5f0f132 100644 +--- a/ChangeLog ++++ b/ChangeLog +@@ -1,3 +1,7 @@ ++2008-10-04 Chris Allegretta <chrisa@asty.org> ++ * cut.c (Add_undo): Save last cut undo information so it can be used for next uncut, fixes ++ Savannah bug 24183. ++ + GNU nano 2.1.6 - 2008.10.03 + 2008-10-03 Pascal Gentil <pascal.gentil@univ-rennes1.fr> + * fortran.nanorc: Sample python syntax highlighting file +diff --git a/src/text.c b/src/text.c +index 407b7ec..97e1f19 100644 +--- a/src/text.c ++++ b/src/text.c +@@ -822,6 +822,7 @@ void add_undo(undo_type current_action) + undo *u, *cutu; + char *data; + openfilestruct *fs = openfile; ++ static undo *last_cutu = NULL; /* Last thing we cut to set up the undo for uncut */ + + /* Ugh, if we were called while cutting not-to-end, non-marked and on the same lineno, + we need to abort here */ +@@ -896,22 +897,22 @@ void add_undo(undo_type current_action) + u->mark_begin_x = openfile->mark_begin_x; + } + u->to_end = (current_action == CUTTOEND); ++ last_cutu = u; + break; + case UNCUT: +- for (cutu = u; cutu != NULL && cutu->type != CUT; cutu = cutu->next) +- ; +- if (cutu->type == CUT) { +- u->cutbuffer = cutu->cutbuffer; +- u->cutbottom = cutu->cutbottom; +- if (!cutu->mark_set) +- u->linescut = cutu->linescut; ++ if (!last_cutu) ++ statusbar(_("Internal error: can't setup uncut. Please save your work.")); ++ else if (last_cutu->type == CUT) { ++ u->cutbuffer = last_cutu->cutbuffer; ++ u->cutbottom = last_cutu->cutbottom; ++ if (!last_cutu->mark_set) ++ u->linescut = last_cutu->linescut; + else { + filestruct *c; + for (c = u->cutbuffer; c != NULL; c = c->next) + u->linescut++; + } +- } else +- statusbar(_("Internal error: can't setup uncut. Please save your work.")); ++ } + break; + case OTHER: + statusbar(_("Internal error: unknown type. Please save your work.")); |