]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-mail: message_search_msg() passes through message_parser_deinit_from_parts()...
authorTimo Sirainen <timo.sirainen@dovecot.fi>
Sun, 28 Feb 2016 20:08:40 +0000 (22:08 +0200)
committerTimo Sirainen <timo.sirainen@dovecot.fi>
Sun, 28 Feb 2016 20:08:40 +0000 (22:08 +0200)
src/lib-mail/message-search.c
src/lib-mail/message-search.h
src/lib-storage/index/index-search.c

index c78006cafa41af44c4e7e78bdab6608bf6889076..001f8848204e33a0877954542a47e5de5d24665c 100644 (file)
@@ -193,7 +193,8 @@ void message_search_reset(struct message_search_context *ctx)
 
 static int
 message_search_msg_real(struct message_search_context *ctx,
-                       struct istream *input, struct message_part *parts)
+                       struct istream *input, struct message_part *parts,
+                       const char **error_r)
 {
        const enum message_header_parser_flags hdr_parser_flags =
                MESSAGE_HEADER_PARSER_FLAG_CLEAN_ONELINE;
@@ -224,7 +225,7 @@ message_search_msg_real(struct message_search_context *ctx,
                /* normal exit */
                ret = 0;
        }
-       if (message_parser_deinit(&parser_ctx, &new_parts) < 0) {
+       if (message_parser_deinit_from_parts(&parser_ctx, &new_parts, error_r) < 0) {
                /* broken parts */
                ret = -1;
        }
@@ -232,12 +233,17 @@ message_search_msg_real(struct message_search_context *ctx,
 }
 
 int message_search_msg(struct message_search_context *ctx,
-                      struct istream *input, struct message_part *parts)
+                      struct istream *input, struct message_part *parts,
+                      const char **error_r)
 {
+       char *error;
        int ret;
 
        T_BEGIN {
-               ret = message_search_msg_real(ctx, input, parts);
+               ret = message_search_msg_real(ctx, input, parts, error_r);
+               error = i_strdup(*error_r);
        } T_END;
+       *error_r = t_strdup(error);
+       i_free(error);
        return ret;
 }
index 5c0c949d5c4951fa255947bc215d259ddbb8f988..7d3786a360bb8736b4556c4508f19ab7674072db 100644 (file)
@@ -33,7 +33,8 @@ void message_search_reset(struct message_search_context *ctx);
 /* Search a full message. Returns 1 if match was found, 0 if not,
    -1 if error (if stream_error == 0, the parts contained broken data) */
 int message_search_msg(struct message_search_context *ctx,
-                      struct istream *input, struct message_part *parts)
+                      struct istream *input, struct message_part *parts,
+                      const char **error_r)
        ATTR_NULL(3);
 
 #endif
index 39f5063157842b0cb39487bb824de7d3e92f30ad..561e0bcd252659fd392f79d2f70d8b5cfdf7b751 100644 (file)
@@ -628,6 +628,7 @@ static void search_body(struct mail_search_arg *arg,
                        struct search_body_context *ctx)
 {
        struct message_search_context *msg_search_ctx;
+       const char *error;
        int ret;
 
        switch (arg->type) {
@@ -645,15 +646,15 @@ static void search_body(struct mail_search_arg *arg,
        }
 
        i_stream_seek(ctx->input, 0);
-       ret = message_search_msg(msg_search_ctx, ctx->input, ctx->part);
+       ret = message_search_msg(msg_search_ctx, ctx->input, ctx->part, &error);
        if (ret < 0 && ctx->input->stream_errno == 0) {
                /* try again without cached parts */
                mail_set_cache_corrupted_reason(ctx->index_ctx->cur_mail,
-                       MAIL_FETCH_MESSAGE_PARTS,
-                       "Cached MIME parts don't match message during parsing in SEARCH");
+                       MAIL_FETCH_MESSAGE_PARTS, t_strdup_printf(
+                       "Cached MIME parts don't match message during parsing in SEARCH: %s", error));
 
                i_stream_seek(ctx->input, 0);
-               ret = message_search_msg(msg_search_ctx, ctx->input, NULL);
+               ret = message_search_msg(msg_search_ctx, ctx->input, NULL, &error);
                i_assert(ret >= 0 || ctx->input->stream_errno != 0);
        }
        if (ctx->input->stream_errno != 0) {