From bbcdd9b5dc14146ab944f92807d015b03a2564ea Mon Sep 17 00:00:00 2001 From: "Daniel P. Berrange" Date: Tue, 3 Sep 2013 12:36:22 +0100 Subject: [PATCH] Stop free'ing 'const char *' strings The VIR_FREE() macro will cast away any const-ness. This masked a number of places where we passed a 'const char *' string to VIR_FREE. Fortunately in all of these cases, the variable was not in fact const data, but a heap allocated string. Fix all the variable declarations to reflect this. Signed-off-by: Daniel P. Berrange --- src/conf/domain_conf.c | 30 +++++++++++------------ src/conf/netdev_vlan_conf.c | 4 +-- src/conf/nwfilter_conf.c | 3 ++- src/node_device/node_device_udev.c | 2 +- src/nwfilter/nwfilter_gentech_driver.c | 2 +- src/qemu/qemu_command.c | 5 ++-- src/qemu/qemu_domain.c | 2 +- src/qemu/qemu_driver.c | 4 +-- src/rpc/virnetsshsession.c | 34 ++++++++++++++++---------- src/storage/storage_backend.c | 2 +- src/storage/storage_driver.c | 2 +- src/util/vircommand.c | 9 +++---- src/util/virlog.c | 4 +-- tools/virsh-domain.c | 19 +++++++------- 14 files changed, 66 insertions(+), 56 deletions(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 276c6bac8d..e28d28ca71 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -6777,9 +6777,9 @@ virDomainChrDefParseTargetXML(virDomainChrDefPtr def, { int ret = -1; unsigned int port; - const char *targetType = virXMLPropString(cur, "type"); - const char *addrStr = NULL; - const char *portStr = NULL; + char *targetType = virXMLPropString(cur, "type"); + char *addrStr = NULL; + char *portStr = NULL; if ((def->targetType = virDomainChrTargetTypeFromString(def, def->deviceType, @@ -8193,7 +8193,7 @@ virDomainGraphicsDefParseXML(xmlNodePtr node, while (cur != NULL) { if (cur->type == XML_ELEMENT_NODE) { if (xmlStrEqual(cur->name, BAD_CAST "channel")) { - const char *name, *mode; + char *name, *mode; int nameval, modeval; name = virXMLPropString(cur, "name"); mode = virXMLPropString(cur, "mode"); @@ -8227,7 +8227,7 @@ virDomainGraphicsDefParseXML(xmlNodePtr node, def->data.spice.channels[nameval] = modeval; } else if (xmlStrEqual(cur->name, BAD_CAST "image")) { - const char *compression = virXMLPropString(cur, "compression"); + char *compression = virXMLPropString(cur, "compression"); int compressionVal; if (!compression) { @@ -8248,7 +8248,7 @@ virDomainGraphicsDefParseXML(xmlNodePtr node, def->data.spice.image = compressionVal; } else if (xmlStrEqual(cur->name, BAD_CAST "jpeg")) { - const char *compression = virXMLPropString(cur, "compression"); + char *compression = virXMLPropString(cur, "compression"); int compressionVal; if (!compression) { @@ -8269,7 +8269,7 @@ virDomainGraphicsDefParseXML(xmlNodePtr node, def->data.spice.jpeg = compressionVal; } else if (xmlStrEqual(cur->name, BAD_CAST "zlib")) { - const char *compression = virXMLPropString(cur, "compression"); + char *compression = virXMLPropString(cur, "compression"); int compressionVal; if (!compression) { @@ -8290,7 +8290,7 @@ virDomainGraphicsDefParseXML(xmlNodePtr node, def->data.spice.zlib = compressionVal; } else if (xmlStrEqual(cur->name, BAD_CAST "playback")) { - const char *compression = virXMLPropString(cur, "compression"); + char *compression = virXMLPropString(cur, "compression"); int compressionVal; if (!compression) { @@ -8311,7 +8311,7 @@ virDomainGraphicsDefParseXML(xmlNodePtr node, def->data.spice.playback = compressionVal; } else if (xmlStrEqual(cur->name, BAD_CAST "streaming")) { - const char *mode = virXMLPropString(cur, "mode"); + char *mode = virXMLPropString(cur, "mode"); int modeVal; if (!mode) { @@ -8331,7 +8331,7 @@ virDomainGraphicsDefParseXML(xmlNodePtr node, def->data.spice.streaming = modeVal; } else if (xmlStrEqual(cur->name, BAD_CAST "clipboard")) { - const char *copypaste = virXMLPropString(cur, "copypaste"); + char *copypaste = virXMLPropString(cur, "copypaste"); int copypasteVal; if (!copypaste) { @@ -8351,7 +8351,7 @@ virDomainGraphicsDefParseXML(xmlNodePtr node, def->data.spice.copypaste = copypasteVal; } else if (xmlStrEqual(cur->name, BAD_CAST "mouse")) { - const char *mode = virXMLPropString(cur, "mode"); + char *mode = virXMLPropString(cur, "mode"); int modeVal; if (!mode) { @@ -8543,9 +8543,9 @@ virDomainRNGDefParseXML(const xmlNodePtr node, xmlXPathContextPtr ctxt, unsigned int flags) { - const char *model = NULL; - const char *backend = NULL; - const char *type = NULL; + char *model = NULL; + char *backend = NULL; + char *type = NULL; virDomainRNGDefPtr def; xmlNodePtr save = ctxt->node; xmlNodePtr *backends = NULL; @@ -15220,7 +15220,7 @@ virDomainChrDefFormat(virBufferPtr buf, return -1; } - const char *addr = virSocketAddrFormat(def->target.addr); + char *addr = virSocketAddrFormat(def->target.addr); if (addr == NULL) return -1; diff --git a/src/conf/netdev_vlan_conf.c b/src/conf/netdev_vlan_conf.c index 60d9eb8352..24e10004ae 100644 --- a/src/conf/netdev_vlan_conf.c +++ b/src/conf/netdev_vlan_conf.c @@ -36,8 +36,8 @@ virNetDevVlanParse(xmlNodePtr node, xmlXPathContextPtr ctxt, virNetDevVlanPtr de { int ret = -1; xmlNodePtr save = ctxt->node; - const char *trunk = NULL; - const char *nativeMode = NULL; + char *trunk = NULL; + char *nativeMode = NULL; xmlNodePtr *tagNodes = NULL; int nTags; size_t i; diff --git a/src/conf/nwfilter_conf.c b/src/conf/nwfilter_conf.c index a3901d367e..00e74ebc77 100644 --- a/src/conf/nwfilter_conf.c +++ b/src/conf/nwfilter_conf.c @@ -2432,7 +2432,8 @@ static const char * virNWFilterIsAllowedChain(const char *chainname) { enum virNWFilterChainSuffixType i; - const char *name, *msg; + const char *name; + char *msg; virBuffer buf = VIR_BUFFER_INITIALIZER; bool printed = false; diff --git a/src/node_device/node_device_udev.c b/src/node_device/node_device_udev.c index 67fcc58038..785c2faadd 100644 --- a/src/node_device/node_device_udev.c +++ b/src/node_device/node_device_udev.c @@ -367,7 +367,7 @@ udevLogFunction(struct udev *udev ATTRIBUTE_UNUSED, va_list args) { virBuffer buf = VIR_BUFFER_INITIALIZER; - const char *format = NULL; + char *format = NULL; virBufferAdd(&buf, fmt, -1); virBufferTrim(&buf, "\n", -1); diff --git a/src/nwfilter/nwfilter_gentech_driver.c b/src/nwfilter/nwfilter_gentech_driver.c index ee9195bfe4..382d73fc8a 100644 --- a/src/nwfilter/nwfilter_gentech_driver.c +++ b/src/nwfilter/nwfilter_gentech_driver.c @@ -499,7 +499,7 @@ virNWFilterDetermineMissingVarsRec(virNWFilterDefPtr filter, for (j = 0; j < rule->nVarAccess; j++) { if (!virNWFilterVarAccessIsAvailable(rule->varAccess[j], vars)) { - const char *varAccess; + char *varAccess; virBuffer buf = VIR_BUFFER_INITIALIZER; virNWFilterVarAccessPrint(rule->varAccess[j], &buf); diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 2f18eef543..db97137b93 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -6147,7 +6147,8 @@ static char *qemuBuildTPMBackendStr(const virDomainDefPtr def, const virDomainTPMDefPtr tpm = def->tpm; virBuffer buf = VIR_BUFFER_INITIALIZER; const char *type = virDomainTPMBackendTypeToString(tpm->type); - const char *cancel_path, *tpmdev; + char *cancel_path; + const char *tpmdev; virBufferAsprintf(&buf, "%s,id=tpm-%s", type, tpm->info.alias); @@ -7772,7 +7773,7 @@ qemuBuildCommandLine(virConnectPtr conn, } if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_RTC)) { - const char *rtcopt; + char *rtcopt; virCommandAddArg(cmd, "-rtc"); if (!(rtcopt = qemuBuildClockArgStr(&def->clock))) goto error; diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 30588fbda1..f2cca70e32 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -1383,7 +1383,7 @@ qemuDomainDefCopy(virQEMUDriverPtr driver, virBuffer buf = VIR_BUFFER_INITIALIZER; virDomainDefPtr ret = NULL; virCapsPtr caps = NULL; - const char *xml = NULL; + char *xml = NULL; if (qemuDomainDefFormatBuf(driver, src, flags, &buf) < 0) goto cleanup; diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 52ca90666b..e37fe339ac 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -14658,7 +14658,7 @@ qemuDomainSetBlockIoTune(virDomainPtr dom, virDomainDefPtr persistentDef = NULL; virDomainBlockIoTuneInfo info; virDomainBlockIoTuneInfo *oldinfo; - const char *device = NULL; + char *device = NULL; int ret = -1; size_t i; int idx = -1; @@ -14836,7 +14836,7 @@ qemuDomainGetBlockIoTune(virDomainPtr dom, qemuDomainObjPrivatePtr priv; virDomainDefPtr persistentDef = NULL; virDomainBlockIoTuneInfo reply; - const char *device = NULL; + char *device = NULL; int ret = -1; size_t i; virCapsPtr caps = NULL; diff --git a/src/rpc/virnetsshsession.c b/src/rpc/virnetsshsession.c index 816c54e634..f544d69c4e 100644 --- a/src/rpc/virnetsshsession.c +++ b/src/rpc/virnetsshsession.c @@ -268,8 +268,9 @@ virNetSSHKbIntCb(const char *name ATTRIBUTE_UNUSED, cleanup: if (askcred) { for (i = 0; i < num_prompts; i++) { + char *prompt = (char *)askcred[i].prompt; VIR_FREE(askcred[i].result); - VIR_FREE(askcred[i].prompt); + VIR_FREE(prompt); } } @@ -291,6 +292,8 @@ virNetSSHCheckHostKey(virNetSSHSessionPtr sess) int ret; const char *key; const char *keyhash; + char *keyhashstr; + char *tmp; int keyType; size_t keyLength; char *errmsg; @@ -364,7 +367,7 @@ virNetSSHCheckHostKey(virNetSSHSessionPtr sess) * Sadly, there's no constant to describe the hash length, so * we have to use a *MAGIC* constant. */ for (i = 0; i < 16; i++) - virBufferAsprintf(&buff, "%02hhX:", keyhash[i]); + virBufferAsprintf(&buff, "%02hhX:", keyhash[i]); virBufferTrim(&buff, ":", 1); if (virBufferError(&buff) != 0) { @@ -372,16 +375,16 @@ virNetSSHCheckHostKey(virNetSSHSessionPtr sess) return -1; } - keyhash = virBufferContentAndReset(&buff); + keyhashstr = virBufferContentAndReset(&buff); askKey.type = VIR_CRED_ECHOPROMPT; if (virAsprintf((char **)&askKey.prompt, _("Accept SSH host key with hash '%s' for " "host '%s:%d' (%s/%s)?"), - keyhash, + keyhashstr, sess->hostname, sess->port, "y", "n") < 0) { - VIR_FREE(keyhash); + VIR_FREE(keyhashstr); return -1; } @@ -389,23 +392,25 @@ virNetSSHCheckHostKey(virNetSSHSessionPtr sess) virReportError(VIR_ERR_SSH, "%s", _("failed to retrieve decision to accept " "host key")); - VIR_FREE(askKey.prompt); - VIR_FREE(keyhash); + tmp = (char*)askKey.prompt; + VIR_FREE(tmp); + VIR_FREE(keyhashstr); return -1; } - VIR_FREE(askKey.prompt); + tmp = (char*)askKey.prompt; + VIR_FREE(tmp); if (!askKey.result || STRCASENEQ(askKey.result, "y")) { virReportError(VIR_ERR_SSH, _("SSH host key for '%s' (%s) was not accepted"), - sess->hostname, keyhash); - VIR_FREE(keyhash); + sess->hostname, keyhashstr); + VIR_FREE(keyhashstr); VIR_FREE(askKey.result); return -1; } - VIR_FREE(keyhash); + VIR_FREE(keyhashstr); VIR_FREE(askKey.result); } @@ -590,6 +595,7 @@ virNetSSHAuthenticatePrivkey(virNetSSHSessionPtr sess, size_t i; char *errmsg; int ret; + char *tmp; /* try open the key with no password */ if ((ret = libssh2_userauth_publickey_fromfile(sess->session, @@ -644,11 +650,13 @@ virNetSSHAuthenticatePrivkey(virNetSSHSessionPtr sess, virReportError(VIR_ERR_SSH, "%s", _("failed to retrieve private key passphrase: " "callback has failed")); - VIR_FREE(retr_passphrase.prompt); + tmp = (char *)retr_passphrase.prompt; + VIR_FREE(tmp); return -1; } - VIR_FREE(retr_passphrase.prompt); + tmp = (char *)retr_passphrase.prompt; + VIR_FREE(tmp); ret = libssh2_userauth_publickey_fromfile(sess->session, priv->username, diff --git a/src/storage/storage_backend.c b/src/storage/storage_backend.c index 4ebe11b515..ed893f0141 100644 --- a/src/storage/storage_backend.c +++ b/src/storage/storage_backend.c @@ -931,7 +931,7 @@ virStorageBackendCreateQemuImg(virConnectPtr conn, unsigned int flags) { int ret = -1; - const char *create_tool; + char *create_tool; int imgformat; virCommandPtr cmd; diff --git a/src/storage/storage_driver.c b/src/storage/storage_driver.c index 323be9e3bf..6c392840f4 100644 --- a/src/storage/storage_driver.c +++ b/src/storage/storage_driver.c @@ -1450,7 +1450,7 @@ storageVolLookupByPath(virConnectPtr conn, virStoragePoolObjLock(driver->pools.objs[i]); if (virStoragePoolObjIsActive(driver->pools.objs[i])) { virStorageVolDefPtr vol; - const char *stable_path; + char *stable_path; stable_path = virStorageBackendStablePath(driver->pools.objs[i], cleanpath, diff --git a/src/util/vircommand.c b/src/util/vircommand.c index 00ff69a54e..95331a6235 100644 --- a/src/util/vircommand.c +++ b/src/util/vircommand.c @@ -405,6 +405,7 @@ virExec(virCommandPtr cmd) int childout = -1; int childerr = -1; int tmpfd; + char *binarystr = NULL; const char *binary = NULL; int forkRet, ret; struct sigaction waxon, waxoff; @@ -412,7 +413,7 @@ virExec(virCommandPtr cmd) int ngroups; if (cmd->args[0][0] != '/') { - if (!(binary = virFindFileInPath(cmd->args[0]))) { + if (!(binary = binarystr = virFindFileInPath(cmd->args[0]))) { virReportSystemError(ENOENT, _("Cannot find '%s' in path"), cmd->args[0]); @@ -506,8 +507,7 @@ virExec(virCommandPtr cmd) cmd->pid = pid; - if (binary != cmd->args[0]) - VIR_FREE(binary); + VIR_FREE(binarystr); VIR_FREE(groups); return 0; @@ -713,8 +713,7 @@ virExec(virCommandPtr cmd) should never jump here on error */ VIR_FREE(groups); - if (binary != cmd->args[0]) - VIR_FREE(binary); + VIR_FREE(binarystr); /* NB we don't virReportError() on any failures here because the code which jumped here already raised diff --git a/src/util/virlog.c b/src/util/virlog.c index 047a131666..7ee5117088 100644 --- a/src/util/virlog.c +++ b/src/util/virlog.c @@ -94,7 +94,7 @@ static regex_t *virLogRegex = NULL; * based on a matching pattern (currently a substring) */ struct _virLogFilter { - const char *match; + char *match; virLogPriority priority; unsigned int flags; }; @@ -115,7 +115,7 @@ struct _virLogOutput { virLogCloseFunc c; virLogPriority priority; virLogDestination dest; - const char *name; + char *name; }; typedef struct _virLogOutput virLogOutput; typedef virLogOutput *virLogOutputPtr; diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c index 4f85f5f7e5..74feca17c9 100644 --- a/tools/virsh-domain.c +++ b/tools/virsh-domain.c @@ -2346,8 +2346,8 @@ cmdDomIfSetLink(vshControl *ctl, const vshCmd *cmd) virDomainPtr dom; const char *iface; const char *state; - const char *value; - const char *desc; + char *value; + char *desc; virMacAddr macaddr; const char *element; const char *attr; @@ -6186,7 +6186,7 @@ cmdCPUBaseline(vshControl *ctl, const vshCmd *cmd) bool ret = false; char *buffer; char *result = NULL; - const char **list = NULL; + char **list = NULL; unsigned int flags = 0; int count = 0; @@ -6243,7 +6243,8 @@ cmdCPUBaseline(vshControl *ctl, const vshCmd *cmd) list[i] = vshStrdup(ctl, (const char *)xmlBufferContent(xml_buf)); } - result = virConnectBaselineCPU(ctl->conn, list, count, flags); + result = virConnectBaselineCPU(ctl->conn, + (const char **)list, count, flags); if (result) { vshPrint(ctl, "%s", result); @@ -6398,7 +6399,7 @@ cmdCPUStats(vshControl *ctl, const vshCmd *cmd) params[pos].value.ul / 1000000000, params[pos].value.ul % 1000000000); } else { - const char *s = vshGetTypedParamValue(ctl, ¶ms[pos]); + char *s = vshGetTypedParamValue(ctl, ¶ms[pos]); vshPrint(ctl, _("%s\n"), s); VIR_FREE(s); } @@ -9874,8 +9875,8 @@ vshPrepareDiskXML(xmlNodePtr disk_node, { xmlNodePtr cur = NULL; xmlBufferPtr xml_buf = NULL; - const char *disk_type = NULL; - const char *device_type = NULL; + char *disk_type = NULL; + char *device_type = NULL; xmlNodePtr new_node = NULL; char *ret = NULL; @@ -10211,9 +10212,9 @@ cmdChangeMedia(vshControl *ctl, const vshCmd *cmd) virDomainPtr dom = NULL; const char *source = NULL; const char *path = NULL; - const char *doc = NULL; + char *doc = NULL; xmlNodePtr disk_node = NULL; - const char *disk_xml = NULL; + char *disk_xml = NULL; bool ret = false; int prepare_type = 0; const char *action = NULL;