[PATCH xrandr v4 2/5] xrandr: stricter --scale argument parsing

walter harms wharms at bfs.de
Mon Feb 5 10:39:57 UTC 2018



Am 05.02.2018 11:24, schrieb Giuseppe Bilotta:
> On Mon, Feb 5, 2018 at 10:44 AM, walter harms <wharms at bfs.de> wrote:
>>
>> Am 05.02.2018 02:47, schrieb Giuseppe Bilotta:
>>>       {
>>>           double  sx, sy;
>>> +         char junk;
>>>           if (!config_output) argerr ("%s must be used after --output\n", argv[i]);
>>>           if (++i >= argc) argerr ("%s requires an argument\n", argv[i-1]);
>>> -         if (sscanf (argv[i], "%lfx%lf", &sx, &sy) != 2)
>>> +         if (sscanf (argv[i], "%lfx%lf%c", &sx, &sy, &junk) != 2)
>>>           {
>>> -             if (sscanf (argv[i], "%lf", &sx) != 1)
>>> +             if (sscanf (argv[i], "%lf%c", &sx, &junk) != 1)
>>>                   argerr ("failed to parse '%s' as a scaling factor\n", argv[i]);
>>>               sy = sx;
>>>           }
>>
>> can the scanf be converted to strtod ? there you get an endpointer by default.
> 
> I'm not a big fan of strtod because with it it's impossible to know if
> a conversion actually happened. xrandr --scale '  ' would actually be
> accepted (resulting in a scale value of 0), while the scanf catches
> it. For the same reason I use two sscanf instead of a single one
> (because that wouldn't be able to catch something like xrandr --scale
> 1j).
> 
> Of course there's also to be said that we could reject a scale factor
> of 0, regardless of whether it comes from a correct parsing of the
> string '0.0' or from the parse of an empty string (but of course then
> we couldn't customize the error message to differentiate between
> “incorrect parse” and “value out of range”).
> 

Ok, i understand. My guess is that a scale factor of 0 would be rejected
or interessting things will happen ....

re,
 wh


More information about the xorg-devel mailing list