]> git.wh0rd.org Git - nano.git/commitdiff
Avoiding a memory leak when tabbing on a string that doesn't occur in the
authorBenno Schulenberg <bensberg@justemail.net>
Sat, 20 Feb 2016 12:16:43 +0000 (12:16 +0000)
committerBenno Schulenberg <bensberg@justemail.net>
Sat, 20 Feb 2016 12:16:43 +0000 (12:16 +0000)
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

ChangeLog
src/prompt.c
src/proto.h
src/search.c

index ac16f711c737af1321217a1fcc31a5c9f2b2dd59..eb00c5a33b2ccaa401600e3e3c28f2e925b8bb65 100644 (file)
--- 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.
index 6c63c0c9ada870c30c248b87413d1b5eb87effa0..d2ddd1c3faef10ea0e58eda6e81e198a28bbc391 100644 (file)
@@ -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
index 06c8c2b61adf3f45497f0c5b6c251670a390eb6f..864e5e8982323be18a49b31082e8d81af474a00a 100644 (file)
@@ -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
index 85345466194958ee35cac108b38784197c01f088..b94e5b4e55d83a9390976bb475604d21b7ae87d2 100644 (file)
@@ -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);
        }
     }