nano

nano with my custom patches
git clone git://bsandro.tech/nano
Log | Files | Refs | README | LICENSE

commit e86dc0381cf65ce62294aae4a0b6ef8282953b5b
parent 5fa5ccff43c4b41265518ff0212f130dc877b475
Author: Benno Schulenberg <bensberg@justemail.net>
Date:   Sat, 20 Feb 2016 12:16:43 +0000

Avoiding a memory leak when tabbing on a string that doesn't occur in the
history.  This fixes Savannah bug #47124 reported by Mike Frysinger.


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@5653 35c25a1d-7b9e-4130-9fde-d3aeb78583b8

Diffstat:
MChangeLog | 5+++++
Msrc/prompt.c | 5++---
Msrc/proto.h | 2+-
Msrc/search.c | 6+++---
4 files changed, 11 insertions(+), 7 deletions(-)

diff --git a/ChangeLog b/ChangeLog @@ -1,3 +1,8 @@ +2016-02-20 Benno Schulenberg <bensberg@justemail.net> + * src/search.c (get_history_completion): Avoid leaking memory + when tabbing on a string that does not occur in the history. + This fixes Savannah bug #47124 reported by Mike Frysinger. + 2016-02-18 Benno Schulenberg <bensberg@justemail.net> * src/search.c (do_replace_loop), src/text.c (do_int_spell_fix), src/winio.c (edit_refresh): Fix Savannah bug #47127 the proper way. diff --git a/src/prompt.c b/src/prompt.c @@ -616,9 +616,8 @@ functionptrtype get_prompt_string(int *actual, bool allow_tabs, complete_len = strlen(answer); if (complete_len > 0) { - answer = mallocstrcpy(answer, - get_history_completion(history_list, - answer, complete_len)); + answer = get_history_completion(history_list, + answer, complete_len); statusbar_x = strlen(answer); } } else diff --git a/src/proto.h b/src/proto.h @@ -623,7 +623,7 @@ void do_gotolinecolumn_void(void); bool find_bracket_match(bool reverse, const char *bracket_set); void do_find_bracket(void); #ifndef DISABLE_TABCOMP -char *get_history_completion(filestruct **h, const char *s, size_t len); +char *get_history_completion(filestruct **h, char *s, size_t len); #endif #endif #ifndef DISABLE_HISTORIES diff --git a/src/search.c b/src/search.c @@ -1351,7 +1351,7 @@ void get_history_older_void(void) * looking at only the first len characters of s, and return that * string. If there isn't one, or if len is 0, don't move h and return * s. */ -char *get_history_completion(filestruct **h, const char *s, size_t len) +char *get_history_completion(filestruct **h, char *s, size_t len) { assert(s != NULL); @@ -1380,7 +1380,7 @@ char *get_history_completion(filestruct **h, const char *s, size_t len) if (p != NULL) { *h = p; - return (*h)->data; + return mallocstrcpy(s, (*h)->data); } /* Search the history list from the top to the current position @@ -1392,7 +1392,7 @@ char *get_history_completion(filestruct **h, const char *s, size_t len) if (p != NULL) { *h = p; - return (*h)->data; + return mallocstrcpy(s, (*h)->data); } }