Mercurial > dovecot > core-2.2
changeset 22802:b034cb09fbb6
lib-imap-client: continue imapc operation on parsing errors.
author | Sergey Kitov <sergey.kitov@open-xchange.com> |
---|---|
date | Mon, 05 Feb 2018 13:38:16 +0200 |
parents | 2fdbdfee4d71 |
children | 766e2da35883 |
files | src/lib-imap-client/imapc-connection.c |
diffstat | 1 files changed, 16 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-imap-client/imapc-connection.c Mon Jan 29 09:55:51 2018 -0500 +++ b/src/lib-imap-client/imapc-connection.c Mon Feb 05 13:38:16 2018 +0200 @@ -694,8 +694,11 @@ return 0; } if (ret < 0) { - imapc_connection_input_error(conn, "Error parsing input: %s", - imap_parser_get_error(conn->parser, &fatal)); + const char *err_msg = imap_parser_get_error(conn->parser, &fatal); + if (fatal) + imapc_connection_input_error(conn, "Error parsing input: %s", err_msg); + else + i_error("Error parsing input: %s", err_msg); return -1; } @@ -729,6 +732,11 @@ i_stream_skip(conn->input, 1); else i_panic("imapc: Missing LF from input line"); + } else if (ret < 0) { + data = i_stream_get_data(conn->input, &size); + unsigned char *lf = memchr(data, '\n', size); + if (lf != NULL) + i_stream_skip(conn->input, (lf - data) + 1); } return ret; } @@ -1199,8 +1207,12 @@ return 1; } - if ((ret = imapc_connection_read_line(conn, &imap_args)) <= 0) - return ret; + if ((ret = imapc_connection_read_line(conn, &imap_args)) == 0) + return 0; + else if (ret < 0) { + imapc_connection_input_reset(conn); + return 1; + } if (!imap_arg_get_atom(&imap_args[0], &name)) { imapc_connection_input_error(conn, "Invalid untagged reply"); return -1;