]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
var-expand: Require extensions to set error_r if ret != 1
authorAki Tuomi <aki.tuomi@dovecot.fi>
Mon, 24 Jul 2017 12:26:10 +0000 (15:26 +0300)
committertimo.sirainen <timo.sirainen@open-xchange.com>
Thu, 7 Jul 2022 13:49:27 +0000 (13:49 +0000)
src/lib/test-var-expand.c
src/lib/var-expand.c

index 77cf6589dfe3afa129d6c7c5451989202dbcb6aa..d6710a3c8e591ae05c9cc336bb6fc05862c6f292 100644 (file)
@@ -252,7 +252,10 @@ static int test_var_expand_bad_func(struct var_expand_context *ctx ATTR_UNUSED,
                                    const char **result_r ATTR_UNUSED,
                                    const char **error_r)
 {
-       if (strcmp(key, "notfound") == 0) return 0;
+       if (strcmp(key, "notfound") == 0) {
+               *error_r = "Invalid field";
+               return 0;
+       }
        *error_r = "Bad parameters";
        return -1;
 }
index c0c0ed2d5b34a02cc6fa3932e144e7b9b1311336..d4e0c275d947120e4087350649a80f8ae6fa34f3 100644 (file)
@@ -402,8 +402,11 @@ var_expand_try_extension(struct var_expand_context *ctx,
        array_foreach(&var_expand_extensions, f) {
                /* ensure we won't match abbreviations */
                size_t len = sep-key;
-               if (strncasecmp(key, f->key, len) == 0 && f->key[len] == '\0')
-                       return f->func(ctx, key, data, var_r, error_r);
+               if (strncasecmp(key, f->key, len) == 0 && f->key[len] == '\0') {
+                       ret = f->func(ctx, key, data, var_r, error_r);
+                       i_assert(ret == 1 || *error_r != NULL);
+                       return ret;
+               }
        }
        if ((ret = var_expand_func(ctx->func_table, key, data,
                                   ctx->context, var_r, error_r)) == 0) {