Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: [PATCH] fix several memory leaks



> On 28 July 2018 at 17:34 "Jun T." <takimoto-j@xxxxxxxxxxxxxxxxx> wrote:
> Here is a list of memory leaks I found and their possible
> fixes. Please check the patches at the end of the post,
> especially those for init.c and termcap.c/terminfo.c.

Thanks.

> diff --git a/Src/Modules/termcap.c b/Src/Modules/termcap.c
> index 60a6e138a..71257c5e9 100644
> --- a/Src/Modules/termcap.c
> +++ b/Src/Modules/termcap.c
> @@ -353,7 +353,8 @@ boot_(UNUSED(Module m))
>       * mean the modules hasn't booted---TERM may change,
>       * and it should be handled dynamically---so ignore errors here.
>       */
> -    (void)setupterm((char *)0, 1, &errret);
> +    if (!cur_term)	/* if zsh/terminfo is not loaded */
> +	(void)setupterm((char *)0, 1, &errret);
>  # endif
>  #endif
>      return  0;

If setupterm(), over which we have no control, is really a problem we probably
need a front-end with a lock to make sure it only ever gets called once.

Something like  a function in utils.c which as the #ifdef buried in it
and simply does nothing if we don't HAVE_SETUPTERM, for example?

> diff --git a/Src/init.c b/Src/init.c
> index c5372665a..e9e6be9b4 100644
> --- a/Src/init.c
> +++ b/Src/init.c
> @@ -459,7 +459,8 @@ parseopts(char *nam, char ***argvp, char *new_opts, char **cmdp,
>  		/* -c command */
>  		*cmdp = *argv;
>  		new_opts[INTERACTIVE] &= 1;
> -		scriptname = scriptfilename = ztrdup("zsh");
> +		if (toplevel)
> +		    scriptname = scriptfilename = ztrdup("zsh");
>  	    } else if (**argv == 'o') {
>  		if (!*++*argv)
>  		    argv++;

Hmm... I'm not quite sure how this case is even supposed to work when dealing with
options not at top level.  But simply leaving the value alone, as you've done,
seems absolutely fine.

pws



Messages sorted by: Reverse Date, Date, Thread, Author