From 096db1ead1ee2baea4acf5e44b192ad442733023 Mon Sep 17 00:00:00 2001 From: Karel Zak Date: Mon, 13 Aug 2012 16:25:01 +0200 Subject: [PATCH] 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 --- lib/mangle.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) 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]); -- 2.47.2