From b32ccee5cb128bf234e3d25a87160de1763a0645 Mon Sep 17 00:00:00 2001 From: Jeremy Sowden Date: Thu, 20 Jun 2019 21:23:52 +0100 Subject: [PATCH] Undo XDG string-escaping when generating menu-entries. In XDG desktop files, string values are subject to escaping. Undo this when parsing them. Signed-off-by: Jeremy Sowden --- util/wmmenugen_parse_xdg.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/util/wmmenugen_parse_xdg.c b/util/wmmenugen_parse_xdg.c index adb47caa..02c7b007 100644 --- a/util/wmmenugen_parse_xdg.c +++ b/util/wmmenugen_parse_xdg.c @@ -297,6 +297,7 @@ static void getKey(char **target, const char *line) static void getStringValue(char **target, const char *line) { const char *p; + char *q; int kstart; p = line; @@ -312,6 +313,26 @@ static void getStringValue(char **target, const char *line) kstart++; *target = wstrdup(p + kstart); + + for (p = q = *target; *p; p++) { + if (*p != '\\') { + *q++ = *p; + } else { + switch (*++p) { + case 's': *q++ = ' '; break; + case 'n': *q++ = '\n'; break; + case 't': *q++ = '\t'; break; + case 'r': *q++ = '\r'; break; + case '\\': *q++ = '\\'; break; + default: + /* + * Skip invalid escape. + */ + break; + } + } + } + *q = '\0'; } /* get a localized string value from line. allocates target, which must be wfreed later.