From 2ffcfb9b45262271019d1751cafc895c3dae8f0e Mon Sep 17 00:00:00 2001 From: Robert Milasan Date: Sun, 10 Feb 2013 11:00:20 +0100 Subject: [PATCH] usb_id: some strange devices have a very bogus or strange serial numer, making a mess in /dev/disk/by-id. Let's check if the serial number is a valid, otherwise don't use it. --- src/udev/udev-builtin-usb_id.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src/udev/udev-builtin-usb_id.c b/src/udev/udev-builtin-usb_id.c index 7ce401d..9e407c5 100644 --- a/src/udev/udev-builtin-usb_id.c +++ b/src/udev/udev-builtin-usb_id.c @@ -23,6 +23,7 @@ #include #include #include +#include #include #include #include @@ -31,6 +32,26 @@ #include "udev.h" +static bool validate_string(const char *str) +{ + const char *s; + + if (!str) + return false; + + for (s = str; *s != '\0'; s++) { + if ((*s >= 'a' && *s <= 'z') || + (*s >= 'A' && *s <= 'Z') || + (*s >= '0' && *s <= '9') || + *s == '-' || *s == '_') + continue; + else + return false; + } + + return true; +} + static void set_usb_iftype(char *to, int if_class_num, size_t len) { const char *type = "generic"; @@ -431,6 +452,8 @@ fallback: const char *usb_serial; usb_serial = udev_device_get_sysattr_value(dev_usb, "serial"); + if (!validate_string(usb_serial)) + usb_serial = NULL; if (usb_serial) { util_replace_whitespace(usb_serial, serial_str, sizeof(serial_str)-1); util_replace_chars(serial_str, NULL); -- 1.7.10.4