From: Vsevolod Stakhov Date: Wed, 14 Aug 2019 08:55:41 +0000 (+0100) Subject: [Fix] Fix sending of large entries via HTTPS X-Git-Tag: 2.0~428 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=5a5e892a64a1d23964010620c529d0947d692237;p=rspamd.git [Fix] Fix sending of large entries via HTTPS --- diff --git a/src/libutil/http_connection.c b/src/libutil/http_connection.c index 094438ee6..31e8a3c1e 100644 --- a/src/libutil/http_connection.c +++ b/src/libutil/http_connection.c @@ -774,7 +774,13 @@ rspamd_http_write_helper (struct rspamd_http_connection *conn) niov = priv->outlen; remain = priv->wr_pos; /* We know that niov is small enough for that */ - cur_iov = alloca (niov * sizeof (struct iovec)); + if (priv->ssl) { + /* Might be recursive! */ + cur_iov = g_malloc (niov * sizeof (struct iovec)); + } + else { + cur_iov = alloca (niov * sizeof (struct iovec)); + } memcpy (cur_iov, priv->out, niov * sizeof (struct iovec)); for (i = 0; i < priv->outlen && remain > 0; i++) { /* Find out the first iov required */ @@ -801,6 +807,7 @@ rspamd_http_write_helper (struct rspamd_http_connection *conn) if (priv->ssl) { r = rspamd_ssl_writev (priv->ssl, msg.msg_iov, msg.msg_iovlen); + g_free (cur_iov); } else { r = sendmsg (conn->fd, &msg, flags); @@ -827,6 +834,12 @@ rspamd_http_write_helper (struct rspamd_http_connection *conn) else { /* Want to write more */ priv->flags &= ~RSPAMD_HTTP_CONN_FLAG_RESETED; + + if (priv->ssl && r > 0) { + /* We can write more data... */ + rspamd_http_write_helper (conn); + return; + } } return;