]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
dict: Fixed crash on iteration handling.
authorTimo Sirainen <timo.sirainen@dovecot.fi>
Thu, 14 Jul 2016 21:16:52 +0000 (16:16 -0500)
committerTimo Sirainen <timo.sirainen@dovecot.fi>
Thu, 14 Jul 2016 21:20:40 +0000 (16:20 -0500)
src/dict/dict-commands.c

index 7c19f468eae3f9886b426390d63d7682403157e4..1b36d4c2ae119a1da8b2721ae24f21a165b3560e 100644 (file)
@@ -173,7 +173,6 @@ static int cmd_iterate_flush(struct dict_connection_cmd *cmd)
 
        cmd_stats_update(cmd, cmd_stats.iterations);
        cmd->reply = i_strdup(str_c(str));
-       dict_connection_cmds_flush(cmd->conn);
        return 1;
 }
 
@@ -495,8 +494,10 @@ static void dict_connection_cmd_output_more(struct dict_connection_cmd *cmd)
        struct dict_connection_cmd *const *first_cmdp;
        
        first_cmdp = array_idx(&cmd->conn->cmds, 0);
-       if (*first_cmdp == cmd)
-               (void)cmd_iterate_flush(cmd);
+       if (*first_cmdp == cmd) {
+               if (cmd_iterate_flush(cmd) > 0)
+                       dict_connection_cmds_flush(cmd->conn);
+       }
 }
 
 void dict_connection_cmds_output_more(struct dict_connection *conn)
@@ -515,6 +516,7 @@ void dict_connection_cmds_output_more(struct dict_connection *conn)
                        /* unfinished */
                        break;
                }
+               dict_connection_cmds_flush(cmd->conn);
                /* cmd should be freed now */
        }
 }