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; 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 {