diff options
author | Neven Sajko <nsajko@gmail.com> | 2019-08-18 13:46:43 +0000 |
---|---|---|
committer | Dan Cross <crossd@gmail.com> | 2020-01-08 08:50:01 -0500 |
commit | 8241eca986a18d242f52273f76d59f6828e6c859 (patch) | |
tree | 4f8a29c0addfee65fb0c3fb58482344f5de8c572 /src/libhtml | |
parent | 2738cc3cfc053a5922aee655405c0ab620beae0f (diff) | |
download | plan9port-8241eca986a18d242f52273f76d59f6828e6c859.tar.gz plan9port-8241eca986a18d242f52273f76d59f6828e6c859.tar.bz2 plan9port-8241eca986a18d242f52273f76d59f6828e6c859.zip |
libhtml: plug quite a few memory leaks
Change-Id: I45bd62a590373669e90183cc2b2ee56570c007f5
Diffstat (limited to 'src/libhtml')
-rw-r--r-- | src/libhtml/build.c | 3 | ||||
-rw-r--r-- | src/libhtml/lex.c | 14 |
2 files changed, 13 insertions, 4 deletions
diff --git a/src/libhtml/build.c b/src/libhtml/build.c index 7ce74449..06397086 100644 --- a/src/libhtml/build.c +++ b/src/libhtml/build.c @@ -2127,6 +2127,7 @@ getitems(ItemSource* is, uchar* data, int datalen) outerps = lastps(ps); ans = outerps->items->next; /* note: ans may be nil and di->kids not nil, if there's a frameset! */ + freeitem(outerps->items); outerps->items = newispacer(ISPnull); outerps->lastit = outerps->items; is->psstk = ps; @@ -2134,6 +2135,7 @@ getitems(ItemSource* is, uchar* data, int datalen) /* TODO evalscript(nil); */ ; } + freeitems(outerps->items); return_ans: if(dbgbuild) { @@ -2143,6 +2145,7 @@ return_ans: else printitems(ans, "getitems returning:"); } + _freetokens(toks, tokslen); return ans; } diff --git a/src/libhtml/lex.c b/src/libhtml/lex.c index 12127b58..258807dd 100644 --- a/src/libhtml/lex.c +++ b/src/libhtml/lex.c @@ -540,8 +540,11 @@ _gettoks(uchar* data, int datalen, int chset, int mtype, int* plen) if(dbglex) fprint(2, "lex: returning %d tokens\n", ai); *plen = ai; - if(ai == 0) + free(ts); + if(ai == 0) { + free(a); return nil; + } return a; } @@ -603,15 +606,18 @@ getplaindata(TokenSource* ts, Token* a, int* pai) } /* Return concatenation of s and buf[0:j] */ +/* Frees s. */ static Rune* buftostr(Rune* s, Rune* buf, int j) { + Rune *tmp; buf[j] = 0; if(s == nil) - s = _Strndup(buf, j); + tmp = _Strndup(buf, j); else - s = _Strdup2(s, buf); - return s; + tmp = _Strdup2(s, buf); + free(s); + return tmp; } /* Gather data up to next start-of-tag or end-of-buffer. */ |