On Thu, 2015-07-30 at 10:57 +0800, Luyao Huang wrote:
>
https://bugzilla.redhat.com/show_bug.cgi?id=1248277
>
> When count <= 0, the client exit without set an error.
>
> Signed-off-by: Luyao Huang <lhuang(a)redhat.com>
> ---
> tools/virsh-domain.c | 6 +++++-
> 1 file changed, 5 insertions(+), 1 deletion(-)
>
> diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c
> index f7edeeb..b6da684 100644
> --- a/tools/virsh-domain.c
> +++ b/tools/virsh-domain.c
> @@ -6744,8 +6744,12 @@ cmdSetvcpus(vshControl *ctl, const vshCmd
> *cmd)
> if (!(dom = vshCommandOptDomain(ctl, cmd, NULL)))
> return false;
>
> - if (vshCommandOptInt(ctl, cmd, "count", &count) < 0 || count
<=
> 0)
> + if (vshCommandOptInt(ctl, cmd, "count", &count) < 0)
> goto cleanup;
> + if (count <= 0) {
> + vshError(ctl, _("Invalid value '%d' for number of virtual
> CPUs"), count);
> + goto cleanup;
> + }
>
> /* none of the options were specified */
> if (!current && flags == 0) {
Nice catch, but I would go for the following diff instead:
-----8<-----
diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c
index a61656f..4b8ebbd 100644
--- a/tools/virsh-domain.c
+++ b/tools/virsh-domain.c
@@ -6819,7 +6819,7 @@ static bool
cmdSetvcpus(vshControl *ctl, const vshCmd *cmd)
{
virDomainPtr dom;
- int count = 0;
+ unsigned int count = 0;
bool ret = false;
bool maximum = vshCommandOptBool(cmd, "maximum");
bool config = vshCommandOptBool(cmd, "config");
@@ -6846,8 +6846,15 @@ cmdSetvcpus(vshControl *ctl, const vshCmd *cmd)
if (!(dom = vshCommandOptDomain(ctl, cmd, NULL)))
return false;
- if (vshCommandOptInt(ctl, cmd, "count", &count) < 0 || count <=
0)
+ if (vshCommandOptUInt(ctl, cmd, "count", &count) < 0)
+ goto cleanup;
+
+ if (count == 0) {
+ vshError(ctl,
+ _("Numeric value '%s' for <%s> option is malformed
or
out of range"),
Since we know that here we are trying to set 0 cpus which is wrong we
can also say that explicitly in the error message rather than copying
the generic one.
Peter