Merge branch 'obsd-master'

This commit is contained in:
Thomas Adam 2022-11-04 10:01:10 +00:00
commit 50f4e0fac9

View File

@ -3575,7 +3575,32 @@ found:
return (found); return (found);
} }
/* Remove escaped characters from string. */ /* Unescape escaped characters. */
static char *
format_unescape(const char *s)
{
char *out, *cp;
int brackets = 0;
cp = out = xmalloc(strlen(s) + 1);
for (; *s != '\0'; s++) {
if (*s == '#' && s[1] == '{')
brackets++;
if (brackets == 0 &&
*s == '#' &&
strchr(",#{}:", s[1]) != NULL) {
*cp++ = *++s;
continue;
}
if (*s == '}')
brackets--;
*cp++ = *s;
}
*cp = '\0';
return (out);
}
/* Remove escaped characters. */
static char * static char *
format_strip(const char *s) format_strip(const char *s)
{ {
@ -4338,7 +4363,8 @@ format_replace(struct format_expand_state *es, const char *key, size_t keylen,
/* Is this a literal string? */ /* Is this a literal string? */
if (modifiers & FORMAT_LITERAL) { if (modifiers & FORMAT_LITERAL) {
value = xstrdup(copy); format_log(es, "literal string is '%s'", copy);
value = format_unescape(copy);
goto done; goto done;
} }