diff options
author | Daryl McDaniel <edk2-lists@mc2research.org> | 2016-02-16 10:47:30 -0800 |
---|---|---|
committer | Daryl McDaniel <edk2-lists@mc2research.org> | 2016-02-17 16:11:29 -0800 |
commit | 7053c3b3b35275a052b2411bf73c1c4f578a0322 (patch) | |
tree | 814ab346947659e8781653d659f11c0913d1d3b9 /StdLib/BsdSocketLib/res_mkupdate.c | |
parent | ea3e924a0c91e2dd7fbb5e2f79899367222f27eb (diff) | |
download | edk2-7053c3b3b35275a052b2411bf73c1c4f578a0322.tar.gz edk2-7053c3b3b35275a052b2411bf73c1c4f578a0322.tar.bz2 edk2-7053c3b3b35275a052b2411bf73c1c4f578a0322.zip |
StdLib/BsdSocketLib: Fix minor memory leak by freeing rrecp on error return.
The error return is triggered by one of two conditions:
1. rrecp is NULL (calloc failed)
2. strdup(dname) returns NULL
Previously, the function just returned NULL. This patch adds a call to
free rrecp before returning NULL. Since the free() function will properly
do nothing when called with a NULL parameter, it is not necessary to
separate the two tests into separate if clauses.
Reported-by: Colin King <colin.king@canonical.com>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Daryl McDaniel <edk2-lists@mc2research.org>
Reviewed-by: Jaben Carsey <jaben.carsey@intel.com>
Diffstat (limited to 'StdLib/BsdSocketLib/res_mkupdate.c')
-rw-r--r-- | StdLib/BsdSocketLib/res_mkupdate.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/StdLib/BsdSocketLib/res_mkupdate.c b/StdLib/BsdSocketLib/res_mkupdate.c index d81d7d6f15..db8540ab4b 100644 --- a/StdLib/BsdSocketLib/res_mkupdate.c +++ b/StdLib/BsdSocketLib/res_mkupdate.c @@ -438,8 +438,10 @@ res_mkupdrec(int section, const char *dname, u_int class, u_int type, u_long ttl) {
ns_updrec *rrecp = (ns_updrec *)calloc(1, sizeof(ns_updrec));
- if (!rrecp || !(rrecp->r_dname = strdup(dname)))
+ if (!rrecp || !(rrecp->r_dname = strdup(dname))) {
+ free(rrecp);
return (NULL);
+ }
rrecp->r_class = (u_int16_t)class;
rrecp->r_type = (u_int16_t)type;
rrecp->r_ttl = (u_int32_t)ttl;
|