diff options
author | Mike Gilbert <floppym@gentoo.org> | 2015-10-03 14:56:15 -0400 |
---|---|---|
committer | Mike Gilbert <floppym@gentoo.org> | 2015-10-03 14:57:15 -0400 |
commit | e9f79718d75e1e2a9b1f5e11073f50b03617fed2 (patch) | |
tree | dfd4488807f8906d6798485aa11fab5d295093f3 /net-p2p/transmission/files | |
parent | sys-apps/the_silver_searcher: version bump to 0.31.0 (diff) | |
download | gentoo-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.patch | 112 |
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 |