Re: PATCH: readline/histexpand.c, resource leak

Jim Blandy
2007-08-15T00:01:16Z

It seems to me that 'words' is a malloc'ed array of malloc'ed strings,
so 'free (words)' still leaks storage.

msnyder@sonic.net writes:
> 2007-07-31 Michael Snyder <msnyder@access-company.com>
>
> * histexpand.c (history_find_word): Resource leak.
>
> Index: histexpand.c
> ===================================================================
> RCS file: /cvs/src/src/readline/histexpand.c,v
> retrieving revision 1.6
> diff -p -r1.6 histexpand.c
> *** histexpand.c 5 May 2006 18:26:12 -0000 1.6
> --- histexpand.c 1 Aug 2007 02:08:51 -0000
> *************** history_find_word (line, ind)
> *** 1581,1588 ****
> int i, wind;
>
> words = history_tokenize_internal (line, ind, &wind);
> ! if (wind == -1 || words == 0)
> return ((char *)NULL);
> s = words[wind];
> for (i = 0; i < wind; i++)
> free (words[i]);
> --- 1581,1594 ----
> int i, wind;
>
> words = history_tokenize_internal (line, ind, &wind);
> ! if (words == NULL)
> return ((char *)NULL);
> + if (wind == -1)
> + {
> + free (words);
> + return ((char *)NULL);
> + }
> +
> s = words[wind];
> for (i = 0; i < wind; i++)
> free (words[i]);