From 5dee253c55f54841ffc923d7c2536c433ee14db9 Mon Sep 17 00:00:00 2001 From: Zhixin Lu Date: Tue, 28 Mar 2023 18:13:23 +0800 Subject: [PATCH 1/2] Fix issue: "imap_response_buffer" is not correct if "MAILIMAP_ERROR_PARSE" happens --- src/low-level/imap/mailimap.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/low-level/imap/mailimap.c b/src/low-level/imap/mailimap.c index 4c225276..284ea1de 100644 --- a/src/low-level/imap/mailimap.c +++ b/src/low-level/imap/mailimap.c @@ -2523,6 +2523,8 @@ int mailimap_parse_response(mailimap * session, mailimap_parser_context_free(parser_ctx); + mmap_string_assign(session->imap_response_buffer, ""); // clear imap_response_buffer of previous command first + if (r != MAILIMAP_NO_ERROR) return r; From 8acc2efd02caebee4243da1e3fa1ed9d3d7b4cc8 Mon Sep 17 00:00:00 2001 From: Zhixin Lu Date: Wed, 29 Mar 2023 17:18:48 +0800 Subject: [PATCH 2/2] Return the original error code instead of "MAILIMAP_ERROR_PARSE" If "mailimap_msg_att_parse_progress" error can't be skipped. --- src/low-level/imap/mailimap_parser.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/low-level/imap/mailimap_parser.c b/src/low-level/imap/mailimap_parser.c index e3aa2f50..2c6ab07e 100644 --- a/src/low-level/imap/mailimap_parser.c +++ b/src/low-level/imap/mailimap_parser.c @@ -7643,6 +7643,7 @@ mailimap_message_data_parse_progress(mailstream * fd, MMAPString * buffer, struc r = mailimap_msg_att_parse_progress(fd, buffer, parser_ctx, &cur_token, &msg_att, progr_rate, progr_fun, body_progr_fun, items_progr_fun, context, msg_att_handler, msg_att_context); if (r != MAILIMAP_NO_ERROR) { + int orig_r = r; // Recover from parser error char * tmp_char = buffer->str + cur_token; int step = 0; @@ -7714,7 +7715,8 @@ mailimap_message_data_parse_progress(mailstream * fd, MMAPString * buffer, struc type = MAILIMAP_MESSAGE_DATA_ERROR; } else { // Unknow error - res = MAILIMAP_ERROR_PARSE; + // res = MAILIMAP_ERROR_PARSE; + res = orig_r; goto err; } } else {