From: Scott James Remnant Date: Wed, 16 May 2007 18:00:29 +0000 (+0200) Subject: replace_untrusted_chars: replace all whitespace with space X-Git-Tag: 174~1946 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=commitdiff_plain;h=ca4f2c41b016530b5865b40b8dbbf0a3a0e8e634 replace_untrusted_chars: replace all whitespace with space --- 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++;