qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH] qemu-io: reject invalid pattern


From: Kevin Wolf
Subject: Re: [Qemu-devel] [PATCH] qemu-io: reject invalid pattern
Date: Mon, 20 Jul 2009 10:05:34 +0200
User-agent: Thunderbird 2.0.0.21 (X11/20090320)

Christoph Hellwig schrieb:
> Replace the use of atoi which is used for pattern parsing currently with
> strtol.  Atoi won't parse sedecimal pattern values (it always returns 0),
> but qemu-iotests use such pattern values.  Also reject every pattern
> that is not a unsigned char as we pass the pattern to memset which
> expect a bye value (despite having the pattern argument declared as int).
> 
> Based on an earlier patch by Stefan Weil which did not include the
> error handling.
> 
> 
> Signed-off-by: Christoph Hellwig <address@hidden>
> Reported-by: Stefan Weil <address@hidden>
> 
> Index: qemu/qemu-io.c
> ===================================================================
> --- qemu.orig/qemu-io.c       2009-07-20 00:59:41.616922630 +0200
> +++ qemu/qemu-io.c    2009-07-20 01:06:23.824900811 +0200
> @@ -26,6 +26,26 @@ static BlockDriverState *bs;
>  static int misalign;
>  
>  /*
> + * Parse the pattern argument to various sub-commands.
> + *
> + * Because the pattern is used as an argument to memset it must evaluate
> + * to an unsigned integer that fits into a single byte.

+ * Returns the pattern byte or -1 in case arg does not contain a valid
pattern

> + */
> +static int parse_pattern(const char *arg)
> +{
> +     char *endptr = NULL;
> +     long pattern;
> +
> +     pattern = strtol(arg, &endptr, 0);
> +     if (pattern < 0 || pattern > UCHAR_MAX || *endptr != '\0') {
> +             printf("%s is not a valid pattern byte\n", arg);
> +             return -1;
> +     }
> +
> +     return pattern;
> +}
> +
> +/*
>   * Memory allocation helpers.
>   *
>   * Make sure memory is aligned by default, or purposefully misaligned if
> @@ -304,7 +324,9 @@ read_f(int argc, char **argv)
>                       break;
>               case 'P':
>                       Pflag = 1;
> -                     pattern = atoi(optarg);
> +                     pattern = parse_pattern(optarg);
> +                     if (pattern < 0)
> +                             return 0;

Coding style (braces).

Looks good to me otherwise.

Kevin




reply via email to

[Prev in Thread] Current Thread [Next in Thread]