util: tighten requirements on the click angle/count properties
authorPeter Hutterer <peter.hutterer@who-t.net>
Thu, 3 Nov 2016 02:34:35 +0000 (12:34 +1000)
committerPeter Hutterer <peter.hutterer@who-t.net>
Tue, 29 Nov 2016 01:21:39 +0000 (11:21 +1000)
Require both of them to be an integer, don't allow for a list or preceding
whitespaces.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
src/libinput-util.c
test/misc.c

index a0b423ba2d0e06bfb8e679f755e7e58a9edba0de..7f0701e5784d19ca1f40b9a1e4e703991929d271 100644 (file)
@@ -182,25 +182,15 @@ parse_mouse_dpi_property(const char *prop)
  * Where the number indicates the number of wheel clicks per 360 deg
  * rotation.
  *
- * We skip preceding whitespaces and parse the first number seen. If
- * multiple numbers are specified, we ignore those.
- *
  * @param prop The value of the udev property (without the MOUSE_WHEEL_CLICK_COUNT=)
  * @return The click count of the wheel (may be negative) or 0 on error.
  */
 int
 parse_mouse_wheel_click_count_property(const char *prop)
 {
-       int count = 0,
-           nread = 0;
-
-       while(*prop != 0 && *prop == ' ')
-               prop++;
+       int count = 0;
 
-       sscanf(prop, "%d%n", &count, &nread);
-       if (nread == 0 || count == 0 || abs(count) > 360)
-               return 0;
-       if (prop[nread] != ' ' && prop[nread] != '\0')
+       if (!safe_atoi(prop, &count) || abs(count) > 360)
                return 0;
 
         return count;
@@ -213,25 +203,15 @@ parse_mouse_wheel_click_count_property(const char *prop)
  * MOUSE_WHEEL_CLICK_ANGLE=<integer>
  * Where the number indicates the degrees travelled for each click.
  *
- * We skip preceding whitespaces and parse the first number seen. If
- * multiple numbers are specified, we ignore those.
- *
  * @param prop The value of the udev property (without the MOUSE_WHEEL_CLICK_ANGLE=)
  * @return The angle of the wheel (may be negative) or 0 on error.
  */
 int
 parse_mouse_wheel_click_angle_property(const char *prop)
 {
-       int angle = 0,
-           nread = 0;
-
-       while(*prop != 0 && *prop == ' ')
-               prop++;
+       int angle = 0;
 
-       sscanf(prop, "%d%n", &angle, &nread);
-       if (nread == 0 || angle == 0 || abs(angle) > 360)
-               return 0;
-       if (prop[nread] != ' ' && prop[nread] != '\0')
+       if (!safe_atoi(prop, &angle) || abs(angle) > 360)
                return 0;
 
         return angle;
index eadeae3a72fd8f491185e2649c53062e0364f2cc..00399d4d2144c6de7aa6c13d110748d47f4a38c1 100644 (file)
@@ -728,8 +728,6 @@ START_TEST(wheel_click_parser)
                { "10", 10 },
                { "-12", -12 },
                { "360", 360 },
-               { "66 ", 66 },
-               { "   100 ", 100 },
 
                { "0", 0 },
                { "-0", 0 },
@@ -757,8 +755,6 @@ START_TEST(wheel_click_count_parser)
                { "10", 10 },
                { "-12", -12 },
                { "360", 360 },
-               { "66 ", 66 },
-               { "   100 ", 100 },
 
                { "0", 0 },
                { "-0", 0 },