From: Timo Sirainen Date: Tue, 11 Feb 2020 09:18:53 +0000 (+0200) Subject: lib: var_expand*() - Return UNKNOWN_VARIABLE_x if %x is unknown X-Git-Tag: 2.3.11.2~482 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=cd422ee6f5614b28c4682f21cb38960133f62dc4;p=thirdparty%2Fdovecot%2Fcore.git lib: var_expand*() - Return UNKNOWN_VARIABLE_x if %x is unknown This was already done for %{long_keys}, just not for single letter keys. --- diff --git a/src/lib/test-var-expand.c b/src/lib/test-var-expand.c index fad1745caa..656b647407 100644 --- a/src/lib/test-var-expand.c +++ b/src/lib/test-var-expand.c @@ -59,6 +59,7 @@ static void test_var_expand_builtin(void) { "%{nonexistent}", "UNSUPPORTED_VARIABLE_nonexistent", 0 }, { "%{nonexistent:default}", "UNSUPPORTED_VARIABLE_nonexistent", 0 }, + { "%x", "UNSUPPORTED_VARIABLE_x", 0 }, }; static const struct var_expand_table table[] = { { 'v', "value", NULL }, diff --git a/src/lib/var-expand.c b/src/lib/var-expand.c index 507fd891f0..465dca6e13 100644 --- a/src/lib/var-expand.c +++ b/src/lib/var-expand.c @@ -189,6 +189,7 @@ var_expand_short(const struct var_expand_table *table, char key, } if (*error_r == NULL) *error_r = t_strdup_printf("Unknown variable '%%%c'", key); + *var_r = t_strdup_printf("UNSUPPORTED_VARIABLE_%c", key); return 0; } @@ -578,12 +579,13 @@ int var_expand_with_funcs(string_t *dest, const char *str, len = end - (str + 1); ret = var_expand_long(&ctx, str+1, len, &var, error_r); - i_assert(var != NULL); str = end; } else { ret = var_expand_short(ctx.table, *str, &var, error_r); } + i_assert(var != NULL); + if (final_ret > ret) final_ret = ret;