]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-imap, global: Add params parameter to imap_parser_create()
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Fri, 6 Mar 2026 13:25:14 +0000 (15:25 +0200)
committerRebaser <foobar@foobar>
Thu, 26 Mar 2026 08:41:12 +0000 (08:41 +0000)
13 files changed:
src/imap-login/imap-login-client.c
src/imap-login/imap-login-cmd-id.c
src/imap/cmd-append.c
src/imap/cmd-setmetadata.c
src/imap/imap-client.c
src/lib-imap-client/imapc-connection.c
src/lib-imap-storage/imap-msgpart.c
src/lib-imap/imap-bodystructure.c
src/lib-imap/imap-envelope.c
src/lib-imap/imap-parser.c
src/lib-imap/imap-parser.h
src/lib-imap/test-imap-parser.c
src/plugins/virtual/virtual-config.c

index c761f91d6e1d6fd0829fc87b47fb0b6d8393dfe3..84e6a90db430260e7652bbc2e3da7186b55837a2 100644 (file)
@@ -383,7 +383,7 @@ static int imap_client_create(struct client *client)
        imap_client->parser =
                imap_parser_create(imap_client->common.input,
                                   imap_client->common.output,
-                                  IMAP_LOGIN_MAX_LINE_LENGTH);
+                                  IMAP_LOGIN_MAX_LINE_LENGTH, NULL);
        struct settings_instance *set_instance = settings_instance_find(client->event);
        if (set_instance == NULL) {
                set_instance = settings_instance_new(
@@ -473,7 +473,7 @@ static void imap_client_starttls(struct client *client)
        imap_client->parser =
                imap_parser_create(imap_client->common.input,
                                   imap_client->common.output,
-                                  IMAP_LOGIN_MAX_LINE_LENGTH);
+                                  IMAP_LOGIN_MAX_LINE_LENGTH, NULL);
 
        /* CRLF is lost from buffer when streams are reopened. */
        imap_client->skip_line = FALSE;
index 24b365dc0c39272d38ee6dfcb6c5cabd34c06b45..be2097f70b159d8ae5c61f3586a1cab968642c03 100644 (file)
@@ -391,7 +391,8 @@ int cmd_id(struct imap_client *client)
                id->params->pool = param_pool;
                id->parser = imap_parser_create(client->common.input,
                                                client->common.output,
-                                               IMAP_LOGIN_MAX_LINE_LENGTH);
+                                               IMAP_LOGIN_MAX_LINE_LENGTH,
+                                               NULL);
                id->log_reply = str_new(default_pool, 64);
                if (client->set->imap_literal_minus)
                        imap_parser_enable_literal_minus(id->parser);
index 8e1dec27e608caffee7bb52f357ce72060f7355e..18f16fc11928f16ce5780f31080cc24d687c5e62 100644 (file)
@@ -1202,7 +1202,8 @@ static bool cmd_append_full(struct client_command_context *cmd, bool replace)
        o_stream_unset_flush_callback(client->output);
 
        ctx->save_parser = imap_parser_create(client->input, client->output,
-                                             client->set->imap_max_line_length);
+                                             client->set->imap_max_line_length,
+                                             NULL);
        if (client->set->imap_literal_minus)
                imap_parser_enable_literal_minus(ctx->save_parser);
 
index 4278c8720e682d0fdeeb0c6dc98e160f208d3f06..686c72c9840e1c57f7c8339719cde1161ef05ed8 100644 (file)
@@ -289,7 +289,8 @@ cmd_setmetadata_start(struct imap_setmetadata_context *ctx)
           asynchronously the same way as APPEND does. */
        client->input_lock = cmd;
        ctx->parser = imap_parser_create(client->input, client->output,
-                                        client->set->imap_max_line_length);
+                                        client->set->imap_max_line_length,
+                                        NULL);
        if (client->set->imap_literal_minus)
                imap_parser_enable_literal_minus(ctx->parser);
        o_stream_unset_flush_callback(client->output);
index 47709aa4009d9780064c7bc560731d5cf1c77745..10a896898885f83c01953c076b4859b6280849ad 100644 (file)
@@ -994,7 +994,8 @@ client_command_new(struct client *client)
        } else {
                cmd->parser =
                        imap_parser_create(client->input, client->output,
-                                          client->set->imap_max_line_length);
+                                          client->set->imap_max_line_length,
+                                          NULL);
                if (client->set->imap_literal_minus)
                        imap_parser_enable_literal_minus(cmd->parser);
        }
index 17aa54c3b0d1a13884b8244dc07e82c1c1346f5f..25dfd32499659beea85aeca8bfc97f47135f8719 100644 (file)
@@ -1914,7 +1914,8 @@ static void imapc_connection_connect_next_ip(struct imapc_connection *conn)
        o_stream_set_flush_callback(conn->output, imapc_connection_connected,
                                    conn);
        conn->parser = imap_parser_create(conn->input, NULL,
-                                         conn->client->set->imapc_max_line_length);
+                                         conn->client->set->imapc_max_line_length,
+                                         NULL);
        conn->to = timeout_add(conn->client->set->imapc_connection_timeout_interval_msecs,
                               imapc_connection_timeout, conn);
        conn->to_output = timeout_add(conn->client->set->imapc_max_idle_time_secs*1000,
index 0442a345b4daed2749bbd39592e289047804277c..3c0bbf5a8166ce5989f3a18978452f6524278c34 100644 (file)
@@ -149,7 +149,7 @@ imap_msgpart_get_header_fields(pool_t pool, const char *header_list,
        int result = 0;
 
        input = i_stream_create_from_data(header_list, strlen(header_list));
-       parser = imap_parser_create(input, NULL, SIZE_MAX);
+       parser = imap_parser_create(input, NULL, SIZE_MAX, NULL);
 
        if (imap_parser_finish_line(parser, 0, 0, &args) > 0 &&
            imap_arg_get_list_full(args, &hdr_list, &list_count) &&
index e3d4b3b56401b45f8b1bb95a47b7f9354ba17975..7910bbcee1977047855a9f33e202b6832ddd5c1e 100644 (file)
@@ -732,7 +732,7 @@ int imap_bodystructure_parse_full(const char *bodystructure,
        input = i_stream_create_from_data(bodystructure, strlen(bodystructure));
        (void)i_stream_read(input);
 
-       parser = imap_parser_create(input, NULL, SIZE_MAX);
+       parser = imap_parser_create(input, NULL, SIZE_MAX, NULL);
        ret = imap_parser_finish_line(parser, 0,
                                      IMAP_PARSE_FLAG_LITERAL_TYPE, &args);
        if (ret < 0) {
@@ -982,7 +982,7 @@ int imap_body_parse_from_bodystructure(const char *bodystructure,
        input = i_stream_create_from_data(bodystructure, strlen(bodystructure));
        (void)i_stream_read(input);
 
-       parser = imap_parser_create(input, NULL, SIZE_MAX);
+       parser = imap_parser_create(input, NULL, SIZE_MAX, NULL);
        ret = imap_parser_finish_line(parser, 0, IMAP_PARSE_FLAG_NO_UNESCAPE |
                                      IMAP_PARSE_FLAG_LITERAL_TYPE, &args);
        if (ret < 0) {
index 395e189c70c89734b41c002ddad6801ced22295c..2e305d7c422b240339ba56964c6d866f160ed648 100644 (file)
@@ -225,7 +225,7 @@ bool imap_envelope_parse(const char *envelope,
        input = i_stream_create_from_data(envelope, strlen(envelope));
        (void)i_stream_read(input);
 
-       parser = imap_parser_create(input, NULL, SIZE_MAX);
+       parser = imap_parser_create(input, NULL, SIZE_MAX, NULL);
        ret = imap_parser_finish_line(parser, 0,
                                      IMAP_PARSE_FLAG_LITERAL_TYPE, &args);
        if (ret < 0) {
index 643f80ceebbb19eab8680cc57ea670ff6c5ce211..532cb97dfb6e3a2587d7df8d5bb176e1d6994049 100644 (file)
@@ -69,7 +69,8 @@ struct imap_parser {
 
 struct imap_parser *
 imap_parser_create(struct istream *input, struct ostream *output,
-                  size_t max_line_size)
+                  size_t max_line_size,
+                  const struct imap_parser_params *params ATTR_UNUSED)
 {
        struct imap_parser *parser;
 
index cd3748c00f2f5e83243ffb62c97d44d81b390d03..16ef2c7a34e91f777a3705fd9c41b2226b20a8c6 100644 (file)
@@ -38,6 +38,9 @@ enum imap_parser_error {
        IMAP_PARSE_ERROR_LITERAL_TOO_BIG
 };
 
+struct imap_parser_params {
+};
+
 struct imap_parser;
 
 /* Create new IMAP argument parser. output is used for sending command
@@ -53,7 +56,8 @@ struct imap_parser;
    2 * max_line_size. */
 struct imap_parser *
 imap_parser_create(struct istream *input, struct ostream *output,
-                  size_t max_line_size) ATTR_NULL(2);
+                  size_t max_line_size,
+                  const struct imap_parser_params *params);
 void imap_parser_ref(struct imap_parser *parser);
 void imap_parser_unref(struct imap_parser **parser);
 
index 32f8d89dea44caae621d9428b9a24ae570025ce1..58c5863d671cac661d8733b3e6fba42d452bcaf2 100644 (file)
@@ -16,7 +16,7 @@ static void test_imap_parser_crlf(void)
 
        test_begin("imap parser crlf handling");
        input = test_istream_create(test_input);
-       parser = imap_parser_create(input, NULL, 1024);
+       parser = imap_parser_create(input, NULL, 1024, NULL);
 
        /* must return -2 until LF is read */
        for (i = 0; test_input[i] != '\n'; i++) {
@@ -60,7 +60,7 @@ static void test_imap_parser_partial_list(void)
 
        test_begin("imap parser partial list");
        input = test_istream_create(test_input);
-       parser = imap_parser_create(input, NULL, 1024);
+       parser = imap_parser_create(input, NULL, 1024, NULL);
 
        (void)i_stream_read(input);
        test_assert(imap_parser_read_args(parser, 0,
@@ -128,7 +128,7 @@ static void test_imap_parser_read_tag_cmd(void)
                if (tests[i].type != COMMAND) {
                        input = test_istream_create(tests[i].input);
                        test_assert(i_stream_read(input) > 0);
-                       parser = imap_parser_create(input, NULL, 1024);
+                       parser = imap_parser_create(input, NULL, 1024, NULL);
                        ret = imap_parser_read_tag(parser, &atom);
                        test_assert_idx(ret == tests[i].ret, i);
                        test_assert_idx(ret <= 0 || strcmp(tests[i].tag, atom) == 0, i);
@@ -139,7 +139,7 @@ static void test_imap_parser_read_tag_cmd(void)
                if (tests[i].type != TAG) {
                        input = test_istream_create(tests[i].input);
                        test_assert(i_stream_read(input) > 0);
-                       parser = imap_parser_create(input, NULL, 1024);
+                       parser = imap_parser_create(input, NULL, 1024, NULL);
                        ret = imap_parser_read_command_name(parser, &atom);
                        test_assert_idx(ret == tests[i].ret, i);
                        test_assert_idx(ret <= 0 || strcmp(tests[i].tag, atom) == 0, i);
@@ -183,7 +183,7 @@ static void test_imap_parser_read_literal(void)
                        test_istream_create_data(tests[i].input, tests[i].len);
                test_assert(i_stream_read(input) > 0);
                struct imap_parser *parser =
-                       imap_parser_create(input, NULL, 1024);
+                       imap_parser_create(input, NULL, 1024, NULL);
                const struct imap_arg *args;
                int ret = imap_parser_read_args(parser, 0, tests[i].flags, &args);
                if (ret != tests[i].ret) {
index f448c81d7d7307cb9111e06607441b281788418a..6ec5aa260ee514c9fe347cd538feaca81ac36890 100644 (file)
@@ -54,7 +54,7 @@ virtual_search_args_parse(const string_t *rule, const char **error_r)
        input = i_stream_create_from_data(str_data(rule), str_len(rule));
        (void)i_stream_read(input);
 
-       imap_parser = imap_parser_create(input, NULL, SIZE_MAX);
+       imap_parser = imap_parser_create(input, NULL, SIZE_MAX, NULL);
        ret = imap_parser_finish_line(imap_parser, 0,  0, &args);
        if (ret < 0) {
                sargs = NULL;