dovecot-2.2: imapc: Fixed parsing "text" input after OK/NO/BAD/BYE.
dovecot at dovecot.org
dovecot at dovecot.org
Wed Sep 26 18:01:29 EEST 2012
details: http://hg.dovecot.org/dovecot-2.2/rev/245fe7fd6f00
changeset: 15130:245fe7fd6f00
user: Timo Sirainen <tss at iki.fi>
date: Tue Sep 11 20:45:38 2012 +0300
description:
imapc: Fixed parsing "text" input after OK/NO/BAD/BYE.
diffstat:
src/lib-imap-client/imapc-connection.c | 18 ++++++++++++------
1 files changed, 12 insertions(+), 6 deletions(-)
diffs (51 lines):
diff -r 382df961f290 -r 245fe7fd6f00 src/lib-imap-client/imapc-connection.c
--- a/src/lib-imap-client/imapc-connection.c Tue Sep 11 20:44:37 2012 +0300
+++ b/src/lib-imap-client/imapc-connection.c Tue Sep 11 20:45:38 2012 +0300
@@ -493,7 +493,8 @@
ret = imap_parser_read_args(conn->parser, 0,
IMAP_PARSE_FLAG_LITERAL_SIZE |
- IMAP_PARSE_FLAG_ATOM_ALLCHARS, imap_args_r);
+ IMAP_PARSE_FLAG_ATOM_ALLCHARS |
+ IMAP_PARSE_FLAG_SERVER_TEXT, imap_args_r);
if (ret == -2) {
/* need more data */
return 0;
@@ -813,6 +814,9 @@
if ((ret = imapc_connection_read_line(conn, &imap_args)) <= 0)
return ret;
+ /* we already verified that the banner beigns with OK */
+ i_assert(imap_arg_atom_equals(imap_args, "OK"));
+ imap_args++;
if (imapc_connection_handle_imap_resp_text(conn, imap_args,
&key, &value) < 0)
@@ -836,6 +840,8 @@
static int imapc_connection_input_untagged(struct imapc_connection *conn)
{
const struct imap_arg *imap_args;
+ const unsigned char *data;
+ size_t size;
const char *name, *value;
struct imap_parser *parser;
struct imapc_untagged_reply reply;
@@ -843,13 +849,13 @@
if (conn->state == IMAPC_CONNECTION_STATE_CONNECTING) {
/* input banner */
- name = imap_parser_read_word(conn->parser);
- if (name == NULL)
+ data = i_stream_get_data(conn->input, &size);
+ if (size < 3 && memchr(data, '\n', size) == NULL)
return 0;
-
- if (strcasecmp(name, "OK") != 0) {
+ if (i_memcasecmp(data, "OK ", 3) != 0) {
imapc_connection_input_error(conn,
- "Banner doesn't begin with OK: %s", name);
+ "Banner doesn't begin with OK: %s",
+ t_strcut(t_strndup(data, size), '\n'));
return -1;
}
conn->input_callback = imapc_connection_input_banner;
More information about the dovecot-cvs
mailing list