commit:     dc985c3cb2c8094313f60553c2a488f9bd39002d
Author:     Mike Frysinger <vapier <AT> gentoo <DOT> org>
AuthorDate: Sun Sep 13 02:51:39 2015 +0000
Commit:     Mike Frysinger <vapier <AT> gentoo <DOT> org>
CommitDate: Sun Sep 13 02:52:22 2015 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=dc985c3c

net-p2p/ctorrent: workaround broken rTorrent files

 net-p2p/ctorrent/ctorrent-3.3.2-r3.ebuild          | 29 +++++++++++++++++
 .../ctorrent-3.3.2-empty-path-components.patch     | 38 ++++++++++++++++++++++
 2 files changed, 67 insertions(+)

diff --git a/net-p2p/ctorrent/ctorrent-3.3.2-r3.ebuild 
b/net-p2p/ctorrent/ctorrent-3.3.2-r3.ebuild
new file mode 100644
index 0000000..d667683
--- /dev/null
+++ b/net-p2p/ctorrent/ctorrent-3.3.2-r3.ebuild
@@ -0,0 +1,29 @@
+# Copyright 1999-2015 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Id$
+
+EAPI="5"
+
+inherit eutils
+
+MY_P="${PN}-dnh${PV}"
+
+DESCRIPTION="Enhanced CTorrent is a BitTorrent console client written in C and 
C++"
+HOMEPAGE="http://www.rahul.net/dholmes/ctorrent/";
+SRC_URI="mirror://sourceforge/dtorrent/${MY_P}.tar.gz"
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~amd64 ~arm ~ppc ~s390 ~sh ~sparc ~x86 ~x86-fbsd"
+IUSE=""
+
+S=${WORKDIR}/${MY_P}
+
+DEPEND="dev-libs/openssl:="
+RDEPEND="${DEPEND}"
+
+src_prepare() {
+       epatch "${FILESDIR}"/${PN}-CVE-2009-1759.patch
+       epatch "${FILESDIR}"/${P}-negative-ints.patch
+       epatch "${FILESDIR}"/${P}-empty-path-components.patch
+}

diff --git a/net-p2p/ctorrent/files/ctorrent-3.3.2-empty-path-components.patch 
b/net-p2p/ctorrent/files/ctorrent-3.3.2-empty-path-components.patch
new file mode 100644
index 0000000..fce41d4
--- /dev/null
+++ b/net-p2p/ctorrent/files/ctorrent-3.3.2-empty-path-components.patch
@@ -0,0 +1,38 @@
+rTorrent sometimes creates invalid torrents which has empty path components.
+the bitorrent spec allows for "" strings, but they make no sense in paths.
+so instead of always adding a / in between, skip them.  ugh.
+
+for example:
+dict {
+       'info' => dict {
+               'name' => str = "some dir" (len = 8)
+               'files' => list [
+                       dict {
+                               'length' => int = 12345567
+                               'path' => list [
+                                       str = "" (len = 0)
+                                       str = "foo.bin" (len = 7)
+                               ]
+                       }
+                       ...
+               ]
+               ...
+       }
+       ...
+}
+
+ctorrent will then try to fetch the file "/some dir/foo.bin" instead of
+"some dir/foo.bin" (relative to $PWD).
+
+--- a/bencode.cpp
++++ b/bencode.cpp
+@@ -258,7 +258,8 @@
+     n -= r; 
+     if( 'e' == *pb ) break;
+     if( pathname >= endmax ) return 0;
+-    *pathname++ = PATH_SP;
++    if (q)
++      *pathname++ = PATH_SP;
+   }
+   *pathname = '\0';
+   return (pb - b + 1);

Reply via email to