X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=udev_utils_string.c;h=6f51aef01417790988d55683fd1435796a128704;hp=38b91aa0bd030ae8f3abb6f4561ab4e5bcf08cf3;hb=ca4f2c41b016530b5865b40b8dbbf0a3a0e8e634;hpb=05610c088ee9ea668d4750f69a35bf833a63616d diff --git a/udev_utils_string.c b/udev_utils_string.c index 38b91aa0b..6f51aef01 100644 --- a/udev_utils_string.c +++ b/udev_utils_string.c @@ -229,15 +229,17 @@ int replace_untrusted_chars(char *str) if ((str[i] >= '0' && str[i] <= '9') || (str[i] >= 'A' && str[i] <= 'Z') || (str[i] >= 'a' && str[i] <= 'z') || - strchr(" #$%+-./:=?@_,", str[i])) { + strchr("#$%+-./:=?@_,", str[i])) { i++; continue; } + /* hex encoding */ if (str[i] == '\\' && str[i+1] == 'x') { i += 2; continue; } + /* valid utf8 is accepted */ len = utf8_encoded_valid_unichar(&str[i]); if (len > 1) { @@ -245,6 +247,14 @@ int replace_untrusted_chars(char *str) continue; } + /* whitespace replaced with ordinary space */ + if (isspace(str[i])) { + str[i] = ' '; + i++; + replaced++; + continue; + } + /* everything else is garbage */ str[i] = '_'; i++;