diff options
author | Kay Sievers <kay.sievers@vrfy.org> | 2007-05-16 19:51:13 +0200 |
---|---|---|
committer | Kay Sievers <kay.sievers@vrfy.org> | 2007-05-16 19:51:13 +0200 |
commit | 05610c088ee9ea668d4750f69a35bf833a63616d (patch) | |
tree | faf5f30c1309aa11e89c471aaea601b97f33d2f8 /udev_utils_string.c | |
parent | c6594afda43575c740aedccef65491420ca3851e (diff) |
udev_db: escape path names with \x00 instead of %00
Diffstat (limited to 'udev_utils_string.c')
-rw-r--r-- | udev_utils_string.c | 25 |
1 files changed, 15 insertions, 10 deletions
diff --git a/udev_utils_string.c b/udev_utils_string.c index b0641f002b..38b91aa0bd 100644 --- a/udev_utils_string.c +++ b/udev_utils_string.c @@ -58,11 +58,11 @@ size_t path_encode(char *s, size_t len) t[0] = '\0'; for (i = 0, j = 0; s[i] != '\0'; i++) { if (s[i] == '/') { - memcpy(&t[j], "%2f", 3); - j += 3; - } else if (s[i] == '%') { - memcpy(&t[j], "%25", 3); - j += 3; + memcpy(&t[j], "\\x2f", 4); + j += 4; + } else if (s[i] == '\\') { + memcpy(&t[j], "\\x5c", 4); + j += 4; } else { t[j] = s[i]; j++; @@ -78,12 +78,12 @@ size_t path_decode(char *s) size_t i, j; for (i = 0, j = 0; s[i] != '\0'; j++) { - if (memcmp(&s[i], "%2f", 3) == 0) { + if (memcmp(&s[i], "\\x2f", 4) == 0) { s[j] = '/'; - i += 3; - }else if (memcmp(&s[i], "%25", 3) == 0) { - s[j] = '%'; - i += 3; + i += 4; + }else if (memcmp(&s[i], "\\x5c", 4) == 0) { + s[j] = '\\'; + i += 4; } else { s[j] = s[i]; i++; @@ -233,6 +233,11 @@ int replace_untrusted_chars(char *str) 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) { |