aboutsummaryrefslogtreecommitdiff
path: root/libctf/ctf-decl.c
diff options
context:
space:
mode:
authorNick Alcock <nick.alcock@oracle.com>2020-06-09 10:45:07 +0100
committerNick Alcock <nick.alcock@oracle.com>2020-07-22 18:02:17 +0100
commitb255b35feb80ecf096825395e01bccd34ee02b2b (patch)
tree851eeafd9c270c6f2435edf28e732893c606d0d6 /libctf/ctf-decl.c
parentc6e9a1e576ce4d948393b29e77b37e4ad934ee8f (diff)
downloadgdb-b255b35feb80ecf096825395e01bccd34ee02b2b.zip
gdb-b255b35feb80ecf096825395e01bccd34ee02b2b.tar.gz
gdb-b255b35feb80ecf096825395e01bccd34ee02b2b.tar.bz2
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.
Diffstat (limited to 'libctf/ctf-decl.c')
-rw-r--r--libctf/ctf-decl.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/libctf/ctf-decl.c b/libctf/ctf-decl.c
index 5dcf60a..faf421e 100644
--- a/libctf/ctf-decl.c
+++ b/libctf/ctf-decl.c
@@ -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;
}