From: Benno Schulenberg Date: Sat, 20 Feb 2016 12:16:43 +0000 (+0000) Subject: Avoiding a memory leak when tabbing on a string that doesn't occur in the X-Git-Tag: v2.5.3~27 X-Git-Url: https://git.wh0rd.org/?a=commitdiff_plain;h=e86dc0381cf65ce62294aae4a0b6ef8282953b5b;p=nano.git 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 --- diff --git a/ChangeLog b/ChangeLog index ac16f711..eb00c5a3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2016-02-20 Benno Schulenberg + * 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 * 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 index 6c63c0c9..d2ddd1c3 100644 --- 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 index 06c8c2b6..864e5e89 100644 --- 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 index 85345466..b94e5b4e 100644 --- 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); } }