]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-dict: Improve handling of invalid replies for commits and lookups
authorMarkus Valentin <markus.valentin@open-xchange.com>
Wed, 28 Dec 2022 11:19:52 +0000 (12:19 +0100)
committeraki.tuomi <aki.tuomi@open-xchange.com>
Thu, 29 Dec 2022 11:11:38 +0000 (11:11 +0000)
Prevent dict_cmd_callback_error() calling the command's callback
recursively. This fixes a crash when dict-client received an invalid
reply on commit or lookup.

src/lib-dict/dict-client.c

index 8f1d68af75cfa086ccf272dbd449e3ae3bce14b7..d175009f5dbb28cb2250b89208866c75ca2e8cc5 100644 (file)
@@ -943,6 +943,10 @@ client_dict_lookup_async_callback(struct client_dict_cmd *cmd,
                result.error = t_strdup_printf(
                        "dict-client: Invalid lookup '%s' reply: %c%s",
                        cmd->query, reply, value);
+               /* This is already the command's callback being called.
+                  Make sure it is not called again by
+                  dict_cmd_callback_error() */
+               cmd->callback = NULL;
                client_dict_disconnect(dict, result.error);
                result.ret = -1;
                break;
@@ -1332,6 +1336,10 @@ client_dict_transaction_commit_callback(struct client_dict_cmd *cmd,
                result.error = t_strdup_printf(
                        "dict-client: Invalid commit reply: %c%s",
                        reply, value);
+               /* This is already the command's callback being called.
+                  Make sure it is not called again by
+                  dict_cmd_callback_error() */
+               cmd->callback = NULL;
                client_dict_disconnect(dict, result.error);
                break;
        }