summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Bartlett <abartlet@samba.org>2003-03-22 23:25:09 +0000
committerAndrew Bartlett <abartlet@samba.org>2003-03-22 23:25:09 +0000
commit1ce67b7672ab58afd76d0ad9cc0343e688c6770d (patch)
tree98443b5eacdf6f81e81f6c71e5a17141372126e5
parentdea7597767e690168e9485dfc2efabaab2dfb4cb (diff)
downloadsamba-1ce67b7672ab58afd76d0ad9cc0343e688c6770d.tar.gz
samba-1ce67b7672ab58afd76d0ad9cc0343e688c6770d.tar.bz2
samba-1ce67b7672ab58afd76d0ad9cc0343e688c6770d.zip
Valgrind found a few memory leaks!
Andrew Bartlett (This used to be commit fb680f610ceb9a0f350c99456cf7ab1a507543fe)
-rw-r--r--source3/lib/gencache.c4
-rw-r--r--source3/libsmb/namecache.c12
-rw-r--r--source3/param/loadparm.c1
3 files changed, 15 insertions, 2 deletions
diff --git a/source3/lib/gencache.c b/source3/lib/gencache.c
index eb0e0cd808..40b4d1390d 100644
--- a/source3/lib/gencache.c
+++ b/source3/lib/gencache.c
@@ -114,6 +114,9 @@ BOOL gencache_set(const char *keystr, const char *value, time_t timeout)
if (!gencache_init()) return False;
asprintf(&valstr, CACHE_DATA_FMT, (int)timeout, value);
+ if (!valstr)
+ return False;
+
keybuf.dptr = strdup(keystr);
keybuf.dsize = strlen(keystr)+1;
databuf.dptr = strdup(valstr);
@@ -241,6 +244,7 @@ BOOL gencache_get(const char *keystr, char **valstr, time_t *timeout)
keybuf.dptr = strdup(keystr);
keybuf.dsize = strlen(keystr)+1;
databuf = tdb_fetch(cache, keybuf);
+ SAFE_FREE(keybuf.dptr);
if (databuf.dptr && databuf.dsize > TIMEOUT_LEN) {
char* entry_buf = strndup(databuf.dptr, databuf.dsize);
diff --git a/source3/libsmb/namecache.c b/source3/libsmb/namecache.c
index 40777011a1..d3541b7719 100644
--- a/source3/libsmb/namecache.c
+++ b/source3/libsmb/namecache.c
@@ -118,6 +118,7 @@ BOOL namecache_store(const char *name, int name_type,
time_t expiry;
char *key, *value_string;
int i;
+ BOOL ret;
/*
* we use gecache call to avoid annoying debug messages about
@@ -152,10 +153,17 @@ BOOL namecache_store(const char *name, int name_type,
* First, store the number of ip addresses and then
* place each single ip
*/
- ipstr_list_make(&value_string, ip_list, num_names);
+ if (!ipstr_list_make(&value_string, ip_list, num_names)) {
+ SAFE_FREE(key);
+ SAFE_FREE(value_string);
+ return False;
+ }
/* set the entry */
- return (gencache_set(key, value_string, expiry));
+ ret = gencache_set(key, value_string, expiry);
+ SAFE_FREE(key);
+ SAFE_FREE(value_string);
+ return ret;
}
diff --git a/source3/param/loadparm.c b/source3/param/loadparm.c
index f8a1990513..0aa5f08be7 100644
--- a/source3/param/loadparm.c
+++ b/source3/param/loadparm.c
@@ -3183,6 +3183,7 @@ BOOL lp_do_parameter(int snum, const char *pszParmName, const char *pszParmValue
break;
case P_LIST:
+ str_list_free(parm_ptr);
*(char ***)parm_ptr = str_list_make(pszParmValue, NULL);
break;