fixes for several memory leaks

Signed-off-by: Eric Blake <eblake@redhat.com>
This commit is contained in:
Phil Petty 2011-03-04 09:52:12 -07:00 committed by Eric Blake
parent a9f35c4863
commit 5a81401235
8 changed files with 35 additions and 19 deletions

View File

@ -156,6 +156,7 @@ Patches have also been contributed by:
Michal Novotny <minovotn@redhat.com>
Christophe Fergeau <teuf@gnome.org>
Markus Groß <gross@univention.de>
Phil Petty <phpetty@cisco.com>
[....send patches to get your name here....]

View File

@ -1,7 +1,7 @@
/*
* secret_conf.c: internal <secret> XML handling
*
* Copyright (C) 2009 Red Hat, Inc.
* Copyright (C) 2009, 2011 Red Hat, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@ -182,6 +182,7 @@ secretXMLParseNode(xmlDocPtr xml, xmlNodePtr root)
cleanup:
VIR_FREE(prop);
VIR_FREE(uuidstr);
virSecretDefFree(def);
xmlXPathFreeContext(ctxt);
return ret;

View File

@ -1,6 +1,7 @@
/*
* nwfilter_gentech_driver.c: generic technology driver
*
* Copyright (C) 2011 Red Hat, Inc.
* Copyright (C) 2010 IBM Corp.
* Copyright (C) 2010 Stefan Berger
*
@ -660,8 +661,6 @@ virNWFilterInstantiate(virConnectPtr conn,
}
virNWFilterUnlockIface(ifname);
VIR_FREE(ptrs);
}
err_exit:
@ -670,6 +669,7 @@ err_exit:
virNWFilterRuleInstFree(insts[j]);
VIR_FREE(insts);
VIR_FREE(ptrs);
virNWFilterHashTableFree(missing_vars);

View File

@ -479,22 +479,27 @@ doRemoteOpen (virConnectPtr conn,
for (i = 0; i < vars->n; i++) {
var = &vars->p[i];
if (STRCASEEQ (var->name, "name")) {
VIR_FREE(name);
name = strdup (var->value);
if (!name) goto out_of_memory;
var->ignore = 1;
} else if (STRCASEEQ (var->name, "command")) {
VIR_FREE(command);
command = strdup (var->value);
if (!command) goto out_of_memory;
var->ignore = 1;
} else if (STRCASEEQ (var->name, "socket")) {
VIR_FREE(sockname);
sockname = strdup (var->value);
if (!sockname) goto out_of_memory;
var->ignore = 1;
} else if (STRCASEEQ (var->name, "auth")) {
VIR_FREE(authtype);
authtype = strdup (var->value);
if (!authtype) goto out_of_memory;
var->ignore = 1;
} else if (STRCASEEQ (var->name, "netcat")) {
VIR_FREE(netcat);
netcat = strdup (var->value);
if (!netcat) goto out_of_memory;
var->ignore = 1;
@ -511,6 +516,7 @@ doRemoteOpen (virConnectPtr conn,
else
priv->debugLog = stderr;
} else if (STRCASEEQ(var->name, "pkipath")) {
VIR_FREE(pkipath);
pkipath = strdup(var->value);
if (!pkipath) goto out_of_memory;
var->ignore = 1;

View File

@ -1,7 +1,7 @@
/**
* conf.c: parser for a subset of the Python encoded Xen configuration files
*
* Copyright (C) 2006, 2007, 2008, 2009, 2010 Red Hat, Inc.
* Copyright (C) 2006-2011 Red Hat, Inc.
*
* See COPYING.LIB for the License of this software
*
@ -648,22 +648,23 @@ virConfParseStatement(virConfParserCtxtPtr ctxt)
SKIP_BLANKS_AND_EOL;
if (CUR == '#') {
return(virConfParseComment(ctxt));
return virConfParseComment(ctxt);
}
name = virConfParseName(ctxt);
if (name == NULL)
return(-1);
return -1;
SKIP_BLANKS;
if (CUR != '=') {
virConfError(ctxt, VIR_ERR_CONF_SYNTAX, _("expecting an assignment"));
return(-1);
VIR_FREE(name);
return -1;
}
NEXT;
SKIP_BLANKS;
value = virConfParseValue(ctxt);
if (value == NULL) {
VIR_FREE(name);
return(-1);
return -1;
}
SKIP_BLANKS;
if (CUR == '#') {
@ -675,16 +676,16 @@ virConfParseStatement(virConfParserCtxtPtr ctxt)
virReportOOMError();
VIR_FREE(name);
virConfFreeValue(value);
return(-1);
return -1;
}
}
if (virConfAddEntry(ctxt->conf, name, value, comm) == NULL) {
VIR_FREE(name);
virConfFreeValue(value);
VIR_FREE(comm);
return(-1);
return -1;
}
return(0);
return 0;
}
/**

View File

@ -1,7 +1,7 @@
/*
* storage_file.c: file utility functions for FS storage backend
*
* Copyright (C) 2007-2010 Red Hat, Inc.
* Copyright (C) 2007-2011 Red Hat, Inc.
* Copyright (C) 2007-2008 Daniel P. Berrange
*
* This library is free software; you can redistribute it and/or
@ -838,8 +838,9 @@ virStorageFileGetMetadataFromFD(const char *path,
if (format < 0 ||
format >= VIR_STORAGE_FILE_LAST) {
virReportSystemError(EINVAL, _("unknown storage file format %d"), format);
return -1;
virReportSystemError(EINVAL, _("unknown storage file format %d"),
format);
goto cleanup;
}
ret = virStorageFileGetMetadataFromBuf(format, path, head, len, meta);

View File

@ -105,8 +105,9 @@ virXPathStringLimit(const char *xpath,
if (tmp != NULL && strlen(tmp) >= maxlen) {
virXMLError(VIR_ERR_INTERNAL_ERROR,
_("\'%s\' value longer than %zd bytes in virXPathStringLimit()"),
_("\'%s\' value longer than %zd bytes"),
xpath, maxlen);
VIR_FREE(tmp);
return NULL;
}

View File

@ -9518,6 +9518,8 @@ cmdCd(vshControl *ctl, const vshCmd *cmd ATTRIBUTE_UNUSED)
{
const char *dir;
int found;
int ret = TRUE;
bool dir_malloced = false;
if (!ctl->imode) {
vshError(ctl, "%s", _("cd: command valid only in interactive mode"));
@ -9528,16 +9530,19 @@ cmdCd(vshControl *ctl, const vshCmd *cmd ATTRIBUTE_UNUSED)
if (!found) {
uid_t uid = geteuid();
dir = virGetUserDirectory(uid);
dir_malloced = !!dir;
}
if (!dir)
dir = "/";
if (chdir (dir) == -1) {
if (chdir(dir) == -1) {
vshError(ctl, _("cd: %s: %s"), strerror(errno), dir);
return FALSE;
ret = FALSE;
}
return TRUE;
if (dir_malloced)
VIR_FREE(dir);
return ret;
}
#endif