From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 28932 invoked from network); 5 Jun 2000 07:56:38 -0000 Received: from sunsite.auc.dk (130.225.51.30) by ns1.primenet.com.au with SMTP; 5 Jun 2000 07:56:38 -0000 Received: (qmail 26146 invoked by alias); 5 Jun 2000 07:56:28 -0000 Mailing-List: contact zsh-workers-help@sunsite.auc.dk; run by ezmlm Precedence: bulk X-No-Archive: yes X-Seq: 11745 Received: (qmail 26138 invoked from network); 5 Jun 2000 07:56:28 -0000 Date: Mon, 5 Jun 2000 09:55:47 +0200 (MET DST) Message-Id: <200006050755.JAA03367@beta.informatik.hu-berlin.de> From: Sven Wischnowsky To: zsh-workers@sunsite.auc.dk In-reply-to: Felix Rosencrantz's message of Fri, 2 Jun 2000 20:23:59 -0700 (PDT) Subject: Re: PATCH: Small memory leak and doc fix Felix Rosencrantz wrote: > Here's another memory leak fix along with a small doc fix. > > There seems to be some situations when the following code will see > uninitialized memory reads from the following stack: > pattern_match [compmatch.c:1035] > match_str [compmatch.c:577] > comp_match [compmatch.c:941] > addmatches [compcore.c:1954] > bin_compadd [complete.c:595] > I haven't looked into this, so if more details are needed let me know. Haven't had the time to look at this, but knowing the match specs used would help. > --- Sven Wischnowsky wrote: > >Hmm. Maybe we get this because some parameter setfn() neither uses nor > >frees the string it gets. > I took a look at some of the memory that wasn't freed, and found one of the > strings had a value that only came out of the value of complist > ("ambiguous packed rows"). So something that touches that value has a problem. > Maybe a parameter operator. I found that at the weekend already: it's $compstate[list]. And then there was another one in $commands. Does that fix the problems with addvars()? > >I can't see where this comes from. mkautofn() creates the > >autofn-program wich is then freed in loadautofn() (or > >freeshfuncnode(), with ksh-autoloading). > > > >All these autofn-progs won't be freed at the end, though (together > >with many other things). > > I can see these errors even before the shell exits. The memory checker > will only list a memory leak if there are no pointers in memory to a memory > block. We are probably losing the pointer to the memory from buitlin.c:2162. Ouch. Right. `pats' should point to the same memory as `prog' because that's what's used for freeing. Bye Sven Index: Src/builtin.c =================================================================== RCS file: /cvsroot/zsh/zsh/Src/builtin.c,v retrieving revision 1.20 diff -u -r1.20 builtin.c --- Src/builtin.c 2000/05/27 08:31:32 1.20 +++ Src/builtin.c 2000/06/05 07:55:01 @@ -2162,7 +2162,7 @@ p->strs = NULL; p->shf = shf; p->npats = 0; - p->pats = NULL; + p->pats = (Patprog *) p->prog; p->flags = EF_REAL; p->dump = NULL; Index: Src/Modules/parameter.c =================================================================== RCS file: /cvsroot/zsh/zsh/Src/Modules/parameter.c,v retrieving revision 1.8 diff -u -r1.8 parameter.c --- Src/Modules/parameter.c 2000/06/02 01:54:16 1.8 +++ Src/Modules/parameter.c 2000/06/05 07:55:01 @@ -192,9 +192,10 @@ static void setpmcommand(Param pm, char *value) { - if (isset(RESTRICTED)) + if (isset(RESTRICTED)) { zwarn("restricted: %s", value, 0); - else { + zsfree(value); + } else { Cmdnam cn = zcalloc(sizeof(*cn)); cn->flags = HASHED; Index: Src/Zle/compresult.c =================================================================== RCS file: /cvsroot/zsh/zsh/Src/Zle/compresult.c,v retrieving revision 1.18 diff -u -r1.18 compresult.c --- Src/Zle/compresult.c 2000/05/31 09:56:12 1.18 +++ Src/Zle/compresult.c 2000/06/05 07:55:02 @@ -1168,7 +1168,7 @@ comp_list(char *v) { zsfree(complist); - complist = ztrdup(v); + complist = v; onlyexpl = (v ? ((strstr(v, "expl") ? 1 : 0) | (strstr(v, "messages") ? 2 : 0)) : 0); -- Sven Wischnowsky wischnow@informatik.hu-berlin.de