summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Gilbert <floppym@gentoo.org>2015-10-03 14:56:15 -0400
committerMike Gilbert <floppym@gentoo.org>2015-10-03 14:57:15 -0400
commite9f79718d75e1e2a9b1f5e11073f50b03617fed2 (patch)
treedfd4488807f8906d6798485aa11fab5d295093f3 /net-p2p/transmission/files
parentsys-apps/the_silver_searcher: version bump to 0.31.0 (diff)
downloadgentoo-e9f79718d75e1e2a9b1f5e11073f50b03617fed2.tar.gz
gentoo-e9f79718d75e1e2a9b1f5e11073f50b03617fed2.tar.bz2
gentoo-e9f79718d75e1e2a9b1f5e11073f50b03617fed2.zip
net-p2p/transmission: Fix issue with encryption with libevent-2.1.5
Backported upstream patches. Bug: https://bugs.gentoo.org/536922 Package-Manager: portage-2.2.22_p5
Diffstat (limited to 'net-p2p/transmission/files')
-rw-r--r--net-p2p/transmission/files/2.84-libevent-2.1.5.patch112
1 files changed, 112 insertions, 0 deletions
diff --git a/net-p2p/transmission/files/2.84-libevent-2.1.5.patch b/net-p2p/transmission/files/2.84-libevent-2.1.5.patch
new file mode 100644
index 000000000000..48101ebfb77d
--- /dev/null
+++ b/net-p2p/transmission/files/2.84-libevent-2.1.5.patch
@@ -0,0 +1,112 @@
+Fix runtime issues with libevent-2.1.5
+
+Bug: https://bugs.gentoo.org/536922
+Index: libtransmission/peer-io.c
+===================================================================
+--- libtransmission/peer-io.c (revision 14541)
++++ libtransmission/peer-io.c (revision 14545)
+@@ -1041,6 +1041,33 @@
+ ***
+ **/
+
++static inline void
++processBuffer (tr_crypto * crypto,
++ struct evbuffer * buffer,
++ size_t offset,
++ size_t size,
++ void (* callback) (tr_crypto *, size_t, const void *, void *))
++{
++ struct evbuffer_ptr pos;
++ struct evbuffer_iovec iovec;
++
++ evbuffer_ptr_set (buffer, &pos, offset, EVBUFFER_PTR_SET);
++
++ do
++ {
++ if (evbuffer_peek (buffer, size, &pos, &iovec, 1) <= 0)
++ break;
++
++ callback (crypto, iovec.iov_len, iovec.iov_base, iovec.iov_base);
++
++ assert (size >= iovec.iov_len);
++ size -= iovec.iov_len;
++ }
++ while (!evbuffer_ptr_set (buffer, &pos, iovec.iov_len, EVBUFFER_PTR_ADD));
++
++ assert (size == 0);
++}
++
+ static void
+ addDatatype (tr_peerIo * io, size_t byteCount, bool isPieceData)
+ {
+@@ -1051,19 +1078,14 @@
+ peer_io_push_datatype (io, d);
+ }
+
+-static void
+-maybeEncryptBuffer (tr_peerIo * io, struct evbuffer * buf)
++static inline void
++maybeEncryptBuffer (tr_peerIo * io,
++ struct evbuffer * buf,
++ size_t offset,
++ size_t size)
+ {
+ if (io->encryption_type == PEER_ENCRYPTION_RC4)
+- {
+- struct evbuffer_ptr pos;
+- struct evbuffer_iovec iovec;
+- evbuffer_ptr_set (buf, &pos, 0, EVBUFFER_PTR_SET);
+- do {
+- evbuffer_peek (buf, -1, &pos, &iovec, 1);
+- tr_cryptoEncrypt (&io->crypto, iovec.iov_len, iovec.iov_base, iovec.iov_base);
+- } while (!evbuffer_ptr_set (buf, &pos, iovec.iov_len, EVBUFFER_PTR_ADD));
+- }
++ processBuffer (&io->crypto, buf, offset, size, &tr_cryptoEncrypt);
+ }
+
+ void
+@@ -1070,7 +1092,7 @@
+ tr_peerIoWriteBuf (tr_peerIo * io, struct evbuffer * buf, bool isPieceData)
+ {
+ const size_t byteCount = evbuffer_get_length (buf);
+- maybeEncryptBuffer (io, buf);
++ maybeEncryptBuffer (io, buf, 0, byteCount);
+ evbuffer_add_buffer (io->outbuf, buf);
+ addDatatype (io, byteCount, isPieceData);
+ }
+@@ -1126,6 +1148,16 @@
+ ****
+ ***/
+
++static inline void
++maybeDecryptBuffer (tr_peerIo * io,
++ struct evbuffer * buf,
++ size_t offset,
++ size_t size)
++{
++ if (io->encryption_type == PEER_ENCRYPTION_RC4)
++ processBuffer (&io->crypto, buf, offset, size, &tr_cryptoDecrypt);
++}
++
+ void
+ tr_peerIoReadBytesToBuf (tr_peerIo * io, struct evbuffer * inbuf, struct evbuffer * outbuf, size_t byteCount)
+ {
+@@ -1141,17 +1173,7 @@
+ evbuffer_add_buffer (outbuf, tmp);
+ evbuffer_free (tmp);
+
+- /* decrypt if needed */
+- if (io->encryption_type == PEER_ENCRYPTION_RC4) {
+- struct evbuffer_ptr pos;
+- struct evbuffer_iovec iovec;
+- evbuffer_ptr_set (outbuf, &pos, old_length, EVBUFFER_PTR_SET);
+- do {
+- evbuffer_peek (outbuf, byteCount, &pos, &iovec, 1);
+- tr_cryptoDecrypt (&io->crypto, iovec.iov_len, iovec.iov_base, iovec.iov_base);
+- byteCount -= iovec.iov_len;
+- } while (!evbuffer_ptr_set (outbuf, &pos, iovec.iov_len, EVBUFFER_PTR_ADD));
+- }
++ maybeDecryptBuffer (io, outbuf, old_length, byteCount);
+ }
+
+ void