From 2dad3ab8045be38711f277f065b76f76bb5f63f8 Mon Sep 17 00:00:00 2001 From: Timo Sirainen Date: Tue, 15 Dec 2009 13:44:15 -0500 Subject: [PATCH] lmtp: Don't lose first 128k of data with >128k mails. --HG-- branch : HEAD --- src/lmtp/commands.c | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/src/lmtp/commands.c b/src/lmtp/commands.c index a700929b49..eb1f6ce9ae 100644 --- a/src/lmtp/commands.c +++ b/src/lmtp/commands.c @@ -694,12 +694,14 @@ static bool client_input_data_write(struct client *client) static int client_input_add_file(struct client *client, const unsigned char *data, size_t size) { + struct client_state *state = &client->state; string_t *path; + ssize_t ret; int fd; - if (client->state.mail_data_output != NULL) { + if (state->mail_data_output != NULL) { /* continue writing to file */ - if (o_stream_send(client->state.mail_data_output, + if (o_stream_send(state->mail_data_output, data, size) != (ssize_t)size) return -1; return 0; @@ -721,9 +723,14 @@ static int client_input_add_file(struct client *client, return -1; } - client->state.mail_data_fd = fd; - client->state.mail_data_output = o_stream_create_fd_file(fd, 0, FALSE); - o_stream_cork(client->state.mail_data_output); + state->mail_data_fd = fd; + state->mail_data_output = o_stream_create_fd_file(fd, 0, FALSE); + o_stream_cork(state->mail_data_output); + + ret = o_stream_send(state->mail_data_output, + state->mail_data->data, state->mail_data->used); + if (ret != (ssize_t)state->mail_data->used) + return -1; if (o_stream_send(client->state.mail_data_output, data, size) != (ssize_t)size) return -1; @@ -734,7 +741,8 @@ static int client_input_add(struct client *client, const unsigned char *data, size_t size) { if (client->state.mail_data->used + size <= - CLIENT_MAIL_DATA_MAX_INMEMORY_SIZE) { + CLIENT_MAIL_DATA_MAX_INMEMORY_SIZE && + client->state.mail_data_output == NULL) { buffer_append(client->state.mail_data, data, size); return 0; } else { -- 2.47.3