From: Vsevolod Stakhov Date: Wed, 10 Sep 2014 15:23:42 +0000 (+0100) Subject: Fix processing of large writes. X-Git-Tag: 0.7.0~13 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f9f1f63b5b35a4730cf0c02474fad94a432e8f83;p=thirdparty%2Frspamd.git Fix processing of large writes. --- diff --git a/src/libutil/http.c b/src/libutil/http.c index 4cc4485f56..5cd5e2e123 100644 --- a/src/libutil/http.c +++ b/src/libutil/http.c @@ -569,6 +569,7 @@ rspamd_http_write_helper (struct rspamd_http_connection *conn) gsize remain; gssize r; GError *err; + struct iovec *cur_iov; priv = conn->priv; @@ -579,12 +580,15 @@ rspamd_http_write_helper (struct rspamd_http_connection *conn) start = &priv->out[0]; niov = priv->outlen; remain = priv->wr_pos; + /* We know that niov is small enough for that */ + 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 */ - start = &priv->out[i]; + start = &cur_iov[i]; if (start->iov_len <= remain) { remain -= start->iov_len; - start = &priv->out[i + 1]; + start = &cur_iov[i + 1]; niov--; } else {