]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
global: Call rfc822_parser_deinit() wherever possible
authorTimo Sirainen <timo.sirainen@dovecot.fi>
Fri, 22 Dec 2017 16:58:11 +0000 (18:58 +0200)
committerVille Savolainen <ville.savolainen@dovecot.fi>
Tue, 6 Mar 2018 10:51:24 +0000 (12:51 +0200)
12 files changed:
src/lib-mail/istream-attachment-extractor.c
src/lib-mail/message-address.c
src/lib-mail/message-date.c
src/lib-mail/message-decoder.c
src/lib-mail/message-id.c
src/lib-mail/message-parser.c
src/lib-mail/message-part-data.c
src/lib-mail/message-search.c
src/lib-mail/test-rfc2231-parser.c
src/lib-mail/test-rfc822-parser.c
src/plugins/fts/fts-build-mail.c
src/plugins/fts/fts-parser-script.c

index 68e6deb53c0f349721a46e4d3d5c8debdc015f56..28a2d93028294f67ec6283679f7a7600b8f9b637 100644 (file)
@@ -87,6 +87,7 @@ static void parse_content_type(struct attachment_istream *astream,
                (void)rfc822_parse_content_type(&parser, content_type);
                astream->part.content_type = i_strdup(str_c(content_type));
        } T_END;
+       rfc822_parser_deinit(&parser);
 }
 
 static void
index afeef889662ee858b7a8eb09c832b5b47789c552..14cc4b5ba5e24660a10a09f51ec9e74eae6f8201 100644 (file)
@@ -403,6 +403,7 @@ message_address_parse_real(pool_t pool, const unsigned char *data, size_t size,
        } else {
                (void)parse_address_list(&ctx, max_addresses);
        }
+       rfc822_parser_deinit(&ctx.parser);
        return ctx.first_addr;
 }
 
index b67b21e30c193c839400b8b6a40c41d976be8288..9a150115a6774c36d5a03c77a002ed9120c05683 100644 (file)
@@ -252,6 +252,7 @@ bool message_date_parse(const unsigned char *data, size_t size,
                ctx.str = t_str_new(128);
                success = message_date_parser_tokens(&ctx, timestamp_r,
                                                     timezone_offset_r);
+               rfc822_parser_deinit(&ctx.parser);
        } T_END;
 
        return success;
index e1f329e3e51cdf8f4892a35d6b53b4f7838d262b..4c283b726761704c6b978f013f0342cdebc0f11a 100644 (file)
@@ -117,6 +117,7 @@ enum message_cte message_decoder_parse_cte(struct message_header_line *hdr)
                        message_cte = MESSAGE_CTE_QP;
                break;
        }
+       rfc822_parser_deinit(&parser);
        return message_cte;
 }
 
@@ -137,8 +138,10 @@ parse_content_type(struct message_decoder_context *ctx,
        str = t_str_new(64);
        ret = rfc822_parse_content_type(&parser, str);
        ctx->content_type = i_strdup(str_c(str));
-       if (ret < 0)
+       if (ret < 0) {
+               rfc822_parser_deinit(&parser);
                return;
+       }
 
        rfc2231_parse(&parser, &results);
        for (; *results != NULL; results += 2) {
@@ -147,6 +150,7 @@ parse_content_type(struct message_decoder_context *ctx,
                        break;
                }
        }
+       rfc822_parser_deinit(&parser);
 }
 
 static bool message_decode_header(struct message_decoder_context *ctx,
index 772535b12eda878a99878da3f562d39d9c442696..68e2be09cc500a43973f51dd104a216294c4c2b5 100644 (file)
@@ -39,6 +39,7 @@ static bool get_untokenized_msgid(const char **msgid_p, string_t *msgid)
                        success = TRUE;
                }
        }
+       rfc822_parser_deinit(&parser);
        return success;
 }
 
index b95448a32927953fc0377fe58c3c6711a14bfae8..b1de1950a4b565f1bd3277b75b76fa57a07ec76a 100644 (file)
@@ -501,8 +501,10 @@ static void parse_content_type(struct message_parser_ctx *ctx,
 
        if (ret < 0 ||
            (ctx->part->flags & MESSAGE_PART_FLAG_MULTIPART) == 0 ||
-           ctx->last_boundary != NULL)
+           ctx->last_boundary != NULL) {
+               rfc822_parser_deinit(&parser);
                return;
+       }
 
        rfc2231_parse(&parser, &results);
        for (; *results != NULL; results += 2) {
@@ -512,6 +514,7 @@ static void parse_content_type(struct message_parser_ctx *ctx,
                        break;
                }
        }
+       rfc822_parser_deinit(&parser);
 }
 
 static bool block_is_at_eoh(const struct message_block *block)
index 7f13244d1146d55201fd84f7f969b67e38ed4e28..35f35a0f9349f1889b93e222f43824ec199bc0cc 100644 (file)
@@ -309,6 +309,7 @@ parse_content_type(struct message_part_data *data,
        parse_mime_parameters(&parser, pool,
                &data->content_type_params,
                &data->content_type_params_count);
+       rfc822_parser_deinit(&parser);
 }
 
 static void
@@ -327,6 +328,7 @@ parse_content_transfer_encoding(struct message_part_data *data,
                data->content_transfer_encoding =
                        p_strdup(pool, str_c(str));
        }
+       rfc822_parser_deinit(&parser);
 }
 
 static void
@@ -340,13 +342,16 @@ parse_content_disposition(struct message_part_data *data,
        rfc822_skip_lwsp(&parser);
 
        str = t_str_new(256);
-       if (rfc822_parse_mime_token(&parser, str) < 0)
+       if (rfc822_parse_mime_token(&parser, str) < 0) {
+               rfc822_parser_deinit(&parser);
                return;
+       }
        data->content_disposition = p_strdup(pool, str_c(str));
 
        parse_mime_parameters(&parser, pool,
                &data->content_disposition_params,
                &data->content_disposition_params_count);
+       rfc822_parser_deinit(&parser);
 }
 
 static void
@@ -379,6 +384,7 @@ parse_content_language(struct message_part_data *data,
                parser.data++;
                rfc822_skip_lwsp(&parser);
        }
+       rfc822_parser_deinit(&parser);
 
        if (array_count(&langs) > 0) {
                array_append_zero(&langs);
index 73509eee4d8a8e0db65b9207b277ea6c6135366c..8cd4e1cfc9a0f52091f85adc7f3f8ea0a08d82d6 100644 (file)
@@ -61,6 +61,7 @@ static void parse_content_type(struct message_search_context *ctx,
        ctx->content_type_text =
                strncasecmp(str_c(content_type), "text/", 5) == 0 ||
                strncasecmp(str_c(content_type), "message/", 8) == 0;
+       rfc822_parser_deinit(&parser);
 }
 
 static void handle_header(struct message_search_context *ctx,
index 085d12615526a7a98a0d8053790469fcadd8ef4d..cc32decdddd370e48356caec13f8e6644ec1df30 100644 (file)
@@ -36,6 +36,7 @@ static void test_rfc2231_parser(void)
        test_assert(rfc2231_parse(&parser, &result) == 0);
        for (i = 0; output[i] != NULL && result[i] != NULL; i++)
                test_assert(strcmp(output[i], result[i]) == 0);
+       rfc822_parser_deinit(&parser);
        test_assert(output[i] == NULL && result[i] == NULL);
        test_end();
 }
index 29102fc49741d02dc3538a8b276af166a4d02800..a758fa698b7afb2e32614a364ea13b55f9b10731 100644 (file)
@@ -31,6 +31,7 @@ static void test_rfc822_parse_quoted_string(void)
                test_assert_idx(rfc822_parse_quoted_string(&parser, str) == tests[i].ret, i);
                test_assert_idx(tests[i].ret < 0 ||
                                strcmp(tests[i].output, str_c(str)) == 0, i);
+               rfc822_parser_deinit(&parser);
                str_truncate(str, 0);
        }
        test_end();
@@ -60,6 +61,7 @@ static void test_rfc822_parse_content_param(void)
                test_assert_idx(strcmp(output[i].value, value) == 0, i);
                i++;
        }
+       rfc822_parser_deinit(&parser);
        test_assert(ret == 0);
        test_assert(i == N_ELEMENTS(output));
        test_end();
index 3a64032e83186ee62c0e6b3be03058244843710f..5c6293e0901b23c44cf2c1723cb96c2cf2ac5386 100644 (file)
@@ -56,6 +56,7 @@ static void fts_build_parse_content_type(struct fts_mail_build_context *ctx,
                (void)rfc822_parse_content_type(&parser, content_type);
                ctx->content_type = str_lcase(i_strdup(str_c(content_type)));
        } T_END;
+       rfc822_parser_deinit(&parser);
 }
 
 static void
index 5eab69e074cbdc46ddb0c78195d5847e7efcee8a..422b8dc53ef7b563991d95469a139f5758a21bf3 100644 (file)
@@ -173,8 +173,10 @@ static void parse_content_disposition(const char *content_disposition,
 
        /* type; param; param; .. */
        str = t_str_new(32);
-       if (rfc822_parse_mime_token(&parser, str) < 0)
+       if (rfc822_parse_mime_token(&parser, str) < 0) {
+               rfc822_parser_deinit(&parser);
                return;
+       }
 
        rfc2231_parse(&parser, &results);
        filename2 = NULL;
@@ -191,6 +193,7 @@ static void parse_content_disposition(const char *content_disposition,
                   much about the filename actually, just about its extension */
                *filename_r = filename2;
        }
+       rfc822_parser_deinit(&parser);
 }
 
 static struct fts_parser *