]> 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:43:22 +0000 (12:43 +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 defd74916a69550293aedd6d143679a991aa7162..af089582ebab168b48519825fca70c136af59f36 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 efa3daa5ac761fdcd450fc10d72b3f408e03268a..4d4cfdadba65834e36a57f4974c81ba0895b5f96 100644 (file)
@@ -404,6 +404,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 9f9d6a1b972f0eb83c133310eb6064bf39cb762e..7a7529a6c806110c41699e3281b5e77ca8ea799e 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 d1264d724b9e2b1ffd5df48a85e401e3f5b87a1b..d5ac9f8a582c8e2367e58dd71b6e3eec6d2cca15 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 94b9fdc91406db7ed34046034233908eeecf9307..e7a4f4cc313f23b565e259e25183131b0e58bde3 100644 (file)
@@ -502,8 +502,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) {
@@ -513,6 +515,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 814282f554702d569ca3567fc1877e274f2c8997..66c043c158c0fed49622e0a2f829f4c0bbf91bea 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 dc1ddf65547c9c4b03743367ea70a9ce17727fd9..59204f4ee53c1b0c4583103624d4ffe81cdc6839 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 7007690897a93be6c8581defaadd37b88c759514..4622962747b18ce743d1ccee76d0710ef54f455b 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 cb4bf1f05fa88452412828a68161d4c0f8e8d3c4..0d2518b88b1bb2df422046295c2f6d7a1f01bed2 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 6befd0146f17abccb291ba317228f914f51a8612..d07d800a6ace79609b9a0c1b0d9247fd4b2eb9d4 100644 (file)
@@ -174,8 +174,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;
@@ -192,6 +194,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 *