]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib: var_expand*() - Return UNKNOWN_VARIABLE_x if %x is unknown
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Tue, 11 Feb 2020 09:18:53 +0000 (11:18 +0200)
committertimo.sirainen <timo.sirainen@open-xchange.com>
Wed, 8 Apr 2020 07:54:32 +0000 (07:54 +0000)
This was already done for %{long_keys}, just not for single letter keys.

src/lib/test-var-expand.c
src/lib/var-expand.c

index fad1745caa90b70fbb20005f512d6b3bcca5dde6..656b647407c1fa78f11b6991564bd83fbda16836 100644 (file)
@@ -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 },
index 507fd891f09e1d675e9afdceb9181d73c4dc33b3..465dca6e138a1ee9344a1774490cabc6ab3ad25f 100644 (file)
@@ -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;