From 6c0e5e3f2c4540dc96bde51ecc9ca2bf30270be4 Mon Sep 17 00:00:00 2001 From: Benno Schulenberg Date: Mon, 15 Feb 2016 12:56:18 +0000 Subject: [PATCH] Freeing not just the struct but also the data it contains, and also when it is the first and only line. This fixes Savannah bug #47153 reported by Mike Frysinger. git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@5646 35c25a1d-7b9e-4130-9fde-d3aeb78583b8 --- ChangeLog | 5 +++++ src/files.c | 8 ++++---- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index 276b5b69..92a629ef 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2016-02-15 Benno Schulenberg + * src/files.c (read_file): Free not just the struct but also the + data it contains, and also when it is the first and only line. + This fixes Savannah bug #47153 reported by Mike Frysinger. + 2016-02-14 Benno Schulenberg * src/search.c (do_replace_loop): Make iterating through replacement matches behave again like iterating through search matches: showing diff --git a/src/files.c b/src/files.c index 0282cb37..2fe1be90 100644 --- a/src/files.c +++ b/src/files.c @@ -871,6 +871,7 @@ void read_file(FILE *f, int fd, const char *filename, bool undoable, bool checkw /* If the file we got doesn't end in a newline, tack its last * line onto the beginning of the line at current. */ if (len > 0) { + filestruct *dropline = fileptr; size_t current_len = strlen(openfile->current->data); /* Adjust the current x-coordinate to compensate for the @@ -896,11 +897,10 @@ void read_file(FILE *f, int fd, const char *filename, bool undoable, bool checkw if (fileptr == openfile->filebot) openfile->filebot = openfile->current; - /* Move fileptr back one line and blow away the old fileptr, - * since its text has been saved. */ + /* Step back one line, and blow away the unterminated line, + * since its text has been copied into current. */ fileptr = fileptr->prev; - if (fileptr != NULL) - free(fileptr->next); + delete_node(dropline); } /* Attach the line at current after the line at fileptr. */