From: Karel Zak Date: Mon, 13 Aug 2012 14:25:01 +0000 (+0200) Subject: libmount: fix unmangle code X-Git-Tag: v2.22-rc2~17 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=096db1ead1ee2baea4acf5e44b192ad442733023;p=thirdparty%2Futil-linux.git libmount: fix unmangle code old version: /mnt/ugly/te\134st\134 -> /mnt/ugly/te\st\134 fixed version: /mnt/ugly/te\134st\134 -> /mnt/ugly/te\st\ Reported-by: Naja Melan Signed-off-by: Karel Zak --- diff --git a/lib/mangle.c b/lib/mangle.c index faddeb879d..2b18173618 100644 --- a/lib/mangle.c +++ b/lib/mangle.c @@ -51,12 +51,13 @@ char *mangle(const char *s) void unmangle_to_buffer(const char *s, char *buf, size_t len) { size_t sz = 0; + char *x = buf; if (!s) return; while(*s && sz < len - 1) { - if (*s == '\\' && sz + 4 < len - 1 && isoctal(s[1]) && + if (*s == '\\' && sz + 3 < len - 1 && isoctal(s[1]) && isoctal(s[2]) && isoctal(s[3])) { *buf++ = 64*(s[1] & 7) + 8*(s[2] & 7) + (s[3] & 7); @@ -78,7 +79,7 @@ void unhexmangle_to_buffer(const char *s, char *buf, size_t len) return; while(*s && sz < len - 1) { - if (*s == '\\' && sz + 4 < len - 1 && s[1] == 'x' && + if (*s == '\\' && sz + 3 < len - 1 && s[1] == 'x' && isxdigit(s[2]) && isxdigit(s[3])) { *buf++ = from_hex(s[2]) << 4 | from_hex(s[3]);