Просмотр исходного кода

fix bogus "unexpected command continuation request"

it helps if the code actually does what the comment above it claims.
clarify it a bit, so i don't get stupid ideas again.

This reverts commit cf6a7b4d182d2fe82f7371af9e5a857818f3d02d.
Oswald Buddenhagen 10 лет назад
Родитель
Сommit
4842f5148d
1 измененных файлов с 4 добавлено и 3 удалено
  1. 4 3
      src/drv_imap.c

+ 4 - 3
src/drv_imap.c

@@ -1241,9 +1241,10 @@ imap_socket_read( void *aux )
 			error( "IMAP error: unexpected reply: %s %s\n", arg, cmd ? cmd : "" );
 			break; /* this may mean anything, so prefer not to spam the log */
 		} else if (*arg == '+') {
-			/* This can happen only with the last command underway, as
-			   it enforces a round-trip. */
-			cmdp = ctx->in_progress;
+			/* There can be any number of commands in flight, but only the last
+			 * one can require a continuation, as it enforces a round-trip. */
+			cmdp = (struct imap_cmd *)((char *)ctx->in_progress_append -
+			                           offsetof(struct imap_cmd, next));
 			if (cmdp->param.data) {
 				if (cmdp->param.to_trash)
 					ctx->trashnc = TrashKnown; /* Can't get NO [TRYCREATE] any more. */