libctf, decl: avoid leaks of the formatted string on error

ctf_decl_sprintf builds up a formatted string in the ctf_decl_t's
cd_buf, but then on error this is hardly ever freed: we assume that
ctf_decl_fini frees it, but it leaks it instead.

Make it free it like any decent ADT should.

libctf/
	* ctf-decl.c (ctf_decl_fini): Free the cd_buf.
	(ctf_decl_buf): Once it escapes, don't try to free it later.
This commit is contained in:
Nick Alcock 2020-06-09 10:45:07 +01:00
parent c6e9a1e576
commit b255b35feb
2 changed files with 9 additions and 1 deletions

View file

@ -1,3 +1,8 @@
2020-07-22 Nick Alcock <nick.alcock@oracle.com>
* ctf-decl.c (ctf_decl_fini): Free the cd_buf.
(ctf_decl_buf): Once it escapes, don't try to free it later.
2020-07-22 Nick Alcock <nick.alcock@oracle.com>
* ctf-types.c (ctf_type_aname): Print arg types here...

View file

@ -68,6 +68,7 @@ ctf_decl_fini (ctf_decl_t *cd)
free (cdp);
}
}
free (cd->cd_buf);
}
void
@ -195,5 +196,7 @@ void ctf_decl_sprintf (ctf_decl_t *cd, const char *format, ...)
char *ctf_decl_buf (ctf_decl_t *cd)
{
return cd->cd_buf;
char *buf = cd->cd_buf;
cd->cd_buf = NULL;
return buf;
}