libhtml: plug quite a few memory leaks

Change-Id: I45bd62a590373669e90183cc2b2ee56570c007f5
This commit is contained in:
Neven Sajko 2019-08-18 13:46:43 +00:00 committed by Dan Cross
parent 2738cc3cfc
commit 8241eca986
2 changed files with 13 additions and 4 deletions

View file

@ -2127,6 +2127,7 @@ getitems(ItemSource* is, uchar* data, int datalen)
outerps = lastps(ps); outerps = lastps(ps);
ans = outerps->items->next; ans = outerps->items->next;
/* note: ans may be nil and di->kids not nil, if there's a frameset! */ /* note: ans may be nil and di->kids not nil, if there's a frameset! */
freeitem(outerps->items);
outerps->items = newispacer(ISPnull); outerps->items = newispacer(ISPnull);
outerps->lastit = outerps->items; outerps->lastit = outerps->items;
is->psstk = ps; is->psstk = ps;
@ -2134,6 +2135,7 @@ getitems(ItemSource* is, uchar* data, int datalen)
/* TODO evalscript(nil); */ /* TODO evalscript(nil); */
; ;
} }
freeitems(outerps->items);
return_ans: return_ans:
if(dbgbuild) { if(dbgbuild) {
@ -2143,6 +2145,7 @@ return_ans:
else else
printitems(ans, "getitems returning:"); printitems(ans, "getitems returning:");
} }
_freetokens(toks, tokslen);
return ans; return ans;
} }

View file

@ -540,8 +540,11 @@ _gettoks(uchar* data, int datalen, int chset, int mtype, int* plen)
if(dbglex) if(dbglex)
fprint(2, "lex: returning %d tokens\n", ai); fprint(2, "lex: returning %d tokens\n", ai);
*plen = ai; *plen = ai;
if(ai == 0) free(ts);
if(ai == 0) {
free(a);
return nil; return nil;
}
return a; return a;
} }
@ -603,15 +606,18 @@ getplaindata(TokenSource* ts, Token* a, int* pai)
} }
/* Return concatenation of s and buf[0:j] */ /* Return concatenation of s and buf[0:j] */
/* Frees s. */
static Rune* static Rune*
buftostr(Rune* s, Rune* buf, int j) buftostr(Rune* s, Rune* buf, int j)
{ {
Rune *tmp;
buf[j] = 0; buf[j] = 0;
if(s == nil) if(s == nil)
s = _Strndup(buf, j); tmp = _Strndup(buf, j);
else else
s = _Strdup2(s, buf); tmp = _Strdup2(s, buf);
return s; free(s);
return tmp;
} }
/* Gather data up to next start-of-tag or end-of-buffer. */ /* Gather data up to next start-of-tag or end-of-buffer. */