On 01/02/2014 11:16 AM, John Ferlan wrote:
On 12/28/2013 11:11 AM, Eric Blake wrote:
> While auditing error messages in libvirt.c, I found a couple
> instances that had not been converted to modern error styles,
> and a few places that failed to dispatch the error through
> the known-good connection.
>
> * src/libvirt.c (virDomainPinEmulator, virDomainGetDiskErrors)
> (virDomainSendKey, virDomainGetSecurityLabelList)
> (virDomainGetEmulatorPinInfo): Use typical error reporting.
> (virConnectGetCPUModelNames, virConnectRegisterCloseCallback)
> (virConnectUnregisterCloseCallback, virDomainGetUUID): Report
> error through connection.
>
> Signed-off-by: Eric Blake <eblake(a)redhat.com>
> ---
> src/libvirt.c | 54 ++++++++++++++++++++++++++++--------------------------
> 1 file changed, 28 insertions(+), 26 deletions(-)
>
> virResetLastError();
>
> - if (keycodes == NULL ||
> - nkeycodes <= 0 || nkeycodes > VIR_DOMAIN_SEND_KEY_MAX_KEYS) {
> - virLibDomainError(VIR_ERR_OPERATION_INVALID, __FUNCTION__);
> - virDispatchError(NULL);
> - return -1;
> + virCheckNonNullArgGoto(keycodes, error);
> + virCheckPositiveArgGoto(nkeycodes, error);
> +
> + if (nkeycodes > VIR_DOMAIN_SEND_KEY_MAX_KEYS) {
> + virReportInvalidArg(nkeycodes,
> + _("nkeycodes in %s must be less than %d"),
technically...
less than or equal to ...
Indeed.
> + __FUNCTION__, VIR_DOMAIN_SEND_KEY_MAX_KEYS);
> + goto error;
> }
I think the above code may need to move after the next two domain checks
(although looking forward, I realize it may be irrelevant)...
If domain is NULL at the goto error above, then the domain->conn deref
in error: will cause more havoc.
Yes, I ended up fixing it later in the series; but you have a point
about bisectability not introducing known temporary bugs. I'll hoist
that fix into this patch.
> + virReportInvalidArg(flags,
> + _("flags 'affect live' and 'affect
config' in %s are mutually exclusive"),
> + __FUNCTION__);
The new error message is longer than 80 columns.. split across multiple
lines.
Copied and pasted from elsewhere, but as that is a style issue, fixing
all such instances is still within the bounds of this patch.
ACK with nits.
Here's what I squashed in before pushing...
On second thought, it makes the content changes harder to find, so I
resplit this patch and did the line wrapping in its own patch, then
pushed both patches (line wrapping under the trivial rule). Pushed.
diff --git i/src/libvirt.c w/src/libvirt.c
index 33538f4..c259d2f 100644
--- i/src/libvirt.c
+++ w/src/libvirt.c
@@ -2831,7 +2831,8 @@ virDomainSaveFlags(virDomainPtr domain, const char
*to,
if ((flags & VIR_DOMAIN_SAVE_RUNNING) && (flags &
VIR_DOMAIN_SAVE_PAUSED)) {
virReportInvalidArg(flags, "%s",
- _("running and paused flags are mutually
exclusive"));
+ _("running and paused flags are mutually "
+ "exclusive"));
goto error;
}
@@ -2971,7 +2972,8 @@ virDomainRestoreFlags(virConnectPtr conn, const
char *from, const char *dxml,
if ((flags & VIR_DOMAIN_SAVE_RUNNING) && (flags &
VIR_DOMAIN_SAVE_PAUSED)) {
virReportInvalidArg(flags, "%s",
- _("running and paused flags are mutually
exclusive"));
+ _("running and paused flags are mutually "
+ "exclusive"));
goto error;
}
@@ -3122,7 +3124,8 @@ virDomainSaveImageDefineXML(virConnectPtr conn,
const char *file,
if ((flags & VIR_DOMAIN_SAVE_RUNNING) && (flags &
VIR_DOMAIN_SAVE_PAUSED)) {
virReportInvalidArg(flags, "%s",
- _("running and paused flags are mutually
exclusive"));
+ _("running and paused flags are mutually "
+ "exclusive"));
goto error;
}
@@ -4163,7 +4166,8 @@ virDomainGetMemoryParameters(virDomainPtr domain,
if ((flags & VIR_DOMAIN_AFFECT_LIVE) &&
(flags & VIR_DOMAIN_AFFECT_CONFIG)) {
virReportInvalidArg(flags,
- _("flags 'affect live' and 'affect
config'
in %s are mutually exclusive"),
+ _("flags 'affect live' and 'affect
config'
in %s "
+ "are mutually exclusive"),
__FUNCTION__);
goto error;
}
@@ -4428,7 +4432,8 @@ virDomainGetBlkioParameters(virDomainPtr domain,
if ((flags & VIR_DOMAIN_AFFECT_LIVE) &&
(flags & VIR_DOMAIN_AFFECT_CONFIG)) {
virReportInvalidArg(flags,
- _("flags 'affect live' and 'affect
config'
in %s are mutually exclusive"),
+ _("flags 'affect live' and 'affect
config'
in %s "
+ "are mutually exclusive"),
__FUNCTION__);
goto error;
}
@@ -7738,7 +7743,8 @@ virNodeGetCPUStats(virConnectPtr conn,
virCheckNonNegativeArgGoto(*nparams, error);
if (cpuNum < 0 && cpuNum != VIR_NODE_CPU_STATS_ALL_CPUS) {
virReportInvalidArg(cpuNum,
- _("cpuNum in %s only accepts %d as a
negative value"),
+ _("cpuNum in %s only accepts %d as a negative "
+ "value"),
__FUNCTION__, VIR_NODE_CPU_STATS_ALL_CPUS);
goto error;
}
@@ -7829,7 +7835,8 @@ virNodeGetMemoryStats(virConnectPtr conn,
virCheckNonNegativeArgGoto(*nparams, error);
if (cellNum < 0 && cellNum != VIR_NODE_MEMORY_STATS_ALL_CELLS) {
virReportInvalidArg(cpuNum,
- _("cellNum in %s only accepts %d as a
negative value"),
+ _("cellNum in %s only accepts %d as a
negative "
+ "value"),
__FUNCTION__, VIR_NODE_MEMORY_STATS_ALL_CELLS);
goto error;
}
@@ -8241,7 +8248,8 @@ virDomainGetSchedulerParametersFlags(virDomainPtr
domain,
if ((flags & VIR_DOMAIN_AFFECT_LIVE) &&
(flags & VIR_DOMAIN_AFFECT_CONFIG)) {
virReportInvalidArg(flags,
- _("flags 'affect live' and 'affect
config'
in %s are mutually exclusive"),
+ _("flags 'affect live' and 'affect
config'
in %s "
+ "are mutually exclusive"),
__FUNCTION__);
goto error;
}
@@ -9070,7 +9078,8 @@ virDomainMemoryPeek(virDomainPtr dom,
/* Exactly one of these two flags must be set. */
if (!(flags & VIR_MEMORY_VIRTUAL) == !(flags & VIR_MEMORY_PHYSICAL)) {
virReportInvalidArg(flags,
- _("flags in %s must include
VIR_MEMORY_VIRTUAL or VIR_MEMORY_PHYSICAL"),
+ _("flags in %s must include
VIR_MEMORY_VIRTUAL or "
+ "VIR_MEMORY_PHYSICAL"),
__FUNCTION__);
goto error;
}
@@ -9877,21 +9886,22 @@ virDomainSendKey(virDomainPtr domain,
virResetLastError();
+ if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
+ virLibDomainError(VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
+ virDispatchError(NULL);
+ return -1;
+ }
+
virCheckNonNullArgGoto(keycodes, error);
virCheckPositiveArgGoto(nkeycodes, error);
if (nkeycodes > VIR_DOMAIN_SEND_KEY_MAX_KEYS) {
virReportInvalidArg(nkeycodes,
- _("nkeycodes in %s must be less than %d"),
+ _("nkeycodes in %s must be <= %d"),
__FUNCTION__, VIR_DOMAIN_SEND_KEY_MAX_KEYS);
goto error;
}
- if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
- virLibDomainError(VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
- virDispatchError(NULL);
- return -1;
- }
if (domain->conn->flags & VIR_CONNECT_RO) {
virLibDomainError(VIR_ERR_OPERATION_DENIED, __FUNCTION__);
goto error;
@@ -10414,7 +10424,8 @@ virDomainGetVcpuPinInfo(virDomainPtr domain, int
ncpumaps,
if ((flags & VIR_DOMAIN_AFFECT_LIVE) &&
(flags & VIR_DOMAIN_AFFECT_CONFIG)) {
virReportInvalidArg(flags,
- _("flags 'affect live' and 'affect
config'
in %s are mutually exclusive"),
+ _("flags 'affect live' and 'affect
config'
in %s "
+ "are mutually exclusive"),
__FUNCTION__);
goto error;
}
@@ -10556,7 +10567,8 @@ virDomainGetEmulatorPinInfo(virDomainPtr domain,
unsigned char *cpumap,
if ((flags & VIR_DOMAIN_AFFECT_LIVE) &&
(flags & VIR_DOMAIN_AFFECT_CONFIG)) {
virReportInvalidArg(flags,
- _("flags 'affect live' and 'affect
config'
in %s are mutually exclusive"),
+ _("flags 'affect live' and 'affect
config'
in %s "
+ "are mutually exclusive"),
__FUNCTION__);
goto error;
}
@@ -10850,7 +10862,8 @@ virDomainSetMetadata(virDomainPtr domain,
case VIR_DOMAIN_METADATA_TITLE:
if (metadata && strchr(metadata, '\n')) {
virReportInvalidArg(metadata,
- _("metadata title in %s can't contain
newlines"),
+ _("metadata title in %s can't contain "
+ "newlines"),
__FUNCTION__);
goto error;
}
@@ -10928,7 +10941,8 @@ virDomainGetMetadata(virDomainPtr domain,
if ((flags & VIR_DOMAIN_AFFECT_LIVE) &&
(flags & VIR_DOMAIN_AFFECT_CONFIG)) {
virReportInvalidArg(flags,
- _("flags 'affect live' and 'affect
config'
in %s are mutually exclusive"),
+ _("flags 'affect live' and 'affect
config'
in %s "
+ "are mutually exclusive"),
__FUNCTION__);
goto error;
}
@@ -15464,7 +15478,8 @@ virStorageVolResize(virStorageVolPtr vol,
if (capacity == 0 && !((flags & VIR_STORAGE_VOL_RESIZE_DELTA) ||
(flags & VIR_STORAGE_VOL_RESIZE_SHRINK))) {
virReportInvalidArg(capacity,
- _("capacity in %s cannot be zero without
'delta' or 'shrink' flags set"),
+ _("capacity in %s cannot be zero without
'delta' "
+ "or 'shrink' flags set"),
__FUNCTION__);
goto error;
}
@@ -19610,7 +19625,8 @@ virDomainManagedSave(virDomainPtr dom, unsigned
int flags)
if ((flags & VIR_DOMAIN_SAVE_RUNNING) && (flags &
VIR_DOMAIN_SAVE_PAUSED)) {
virReportInvalidArg(flags,
- _("running and paused flags in %s are
mutually exclusive"),
+ _("running and paused flags in %s are
mutually "
+ "exclusive"),
__FUNCTION__);
goto error;
}
@@ -19937,21 +19953,24 @@ virDomainSnapshotCreateXML(virDomainPtr domain,
if ((flags & VIR_DOMAIN_SNAPSHOT_CREATE_CURRENT) &&
!(flags & VIR_DOMAIN_SNAPSHOT_CREATE_REDEFINE)) {
virReportInvalidArg(flags,
- _("use of 'current' flag in %s requires
'redefine' flag"),
+ _("use of 'current' flag in %s requires "
+ "'redefine' flag"),
__FUNCTION__);
goto error;
}
if ((flags & VIR_DOMAIN_SNAPSHOT_CREATE_REDEFINE) &&
(flags & VIR_DOMAIN_SNAPSHOT_CREATE_NO_METADATA)) {
virReportInvalidArg(flags,
- _("'redefine' and 'no metadata' flags in
%s
are mutually exclusive"),
+ _("'redefine' and 'no metadata' flags in
%s
are "
+ "mutually exclusive"),
__FUNCTION__);
goto error;
}
if ((flags & VIR_DOMAIN_SNAPSHOT_CREATE_REDEFINE) &&
(flags & VIR_DOMAIN_SNAPSHOT_CREATE_HALT)) {
virReportInvalidArg(flags,
- _("'redefine' and 'halt' flags in %s
are
mutually exclusive"),
+ _("'redefine' and 'halt' flags in %s
are
mutually "
+ "exclusive"),
__FUNCTION__);
goto error;
}
@@ -20868,7 +20887,8 @@ virDomainRevertToSnapshot(virDomainSnapshotPtr
snapshot,
if ((flags & VIR_DOMAIN_SNAPSHOT_REVERT_RUNNING) &&
(flags & VIR_DOMAIN_SNAPSHOT_REVERT_PAUSED)) {
virReportInvalidArg(flags,
- _("running and paused flags in %s are
mutually exclusive"),
+ _("running and paused flags in %s are
mutually "
+ "exclusive"),
__FUNCTION__);
goto error;
}
@@ -22110,7 +22130,8 @@ virDomainGetBlockIoTune(virDomainPtr dom,
if ((flags & VIR_DOMAIN_AFFECT_LIVE) &&
(flags & VIR_DOMAIN_AFFECT_CONFIG)) {
virReportInvalidArg(flags,
- _("flags 'affect live' and 'affect
config'
in %s are mutually exclusive"),
+ _("flags 'affect live' and 'affect
config'
in %s "
+ "are mutually exclusive"),
__FUNCTION__);
goto error;
}
--
Eric Blake eblake redhat com +1-919-301-3266
Libvirt virtualization library
http://libvirt.org