Function strtod() sets strtod_error to the pointer of the first invalid character and therefore it does not have to be first character from input. When input is valid then it points to nul byte. Conversion error is indicated by setted errno. Zero-length argument and zero DPI is invalid too.
Update also error message about invalid argument. Signed-off-by: Pali Rohár <pali.ro...@gmail.com> --- xrandr.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/xrandr.c b/xrandr.c index 7f1e867..1960bbf 100644 --- a/xrandr.c +++ b/xrandr.c @@ -3115,9 +3115,10 @@ main (int argc, char **argv) } if (!strcmp ("--dpi", argv[i])) { char *strtod_error; - if (++i >= argc) argerr ("%s requires an argument\n", argv[i-1]); + if (++i >= argc || !argv[i][0]) argerr ("%s requires an argument\n", argv[i-1]); + errno = 0; dpi = strtod(argv[i], &strtod_error); - if (argv[i] == strtod_error) + if (*strtod_error || errno || dpi == 0) { dpi = 0.0; dpi_output_name = argv[i]; @@ -3567,7 +3568,7 @@ main (int argc, char **argv) XRROutputInfo *output_info; XRRModeInfo *mode_info; if (!dpi_output) - fatal ("Cannot find output %s\n", dpi_output_name); + fatal ("%s is not valid DPI nor valid output\n", dpi_output_name); output_info = dpi_output->output_info; mode_info = dpi_output->mode_info; if (output_info && mode_info && output_info->mm_height) -- 2.11.0 _______________________________________________ xorg-devel@lists.x.org: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: https://lists.x.org/mailman/listinfo/xorg-devel