aboutsummaryrefslogtreecommitdiff
path: root/src/libhtml
diff options
context:
space:
mode:
authorNeven Sajko <nsajko@gmail.com>2019-08-18 13:46:43 +0000
committerDan Cross <crossd@gmail.com>2020-01-08 08:50:01 -0500
commit8241eca986a18d242f52273f76d59f6828e6c859 (patch)
tree4f8a29c0addfee65fb0c3fb58482344f5de8c572 /src/libhtml
parent2738cc3cfc053a5922aee655405c0ab620beae0f (diff)
downloadplan9port-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.c3
-rw-r--r--src/libhtml/lex.c14
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. */