commit 6c0e5e3f2c4540dc96bde51ecc9ca2bf30270be4
parent 8d005c87435b8a388d0232e4abaa98e3e06a5894
Author: Benno Schulenberg <bensberg@justemail.net>
Date: Mon, 15 Feb 2016 12:56:18 +0000
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
Diffstat:
2 files changed, 9 insertions(+), 4 deletions(-)
diff --git a/ChangeLog b/ChangeLog
@@ -1,3 +1,8 @@
+2016-02-15 Benno Schulenberg <bensberg@justemail.net>
+ * 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 <bensberg@justemail.net>
* 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
@@ -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. */