rqbit 9.1.0 is mostly a stability and correctness release, with a few small features. Several fixes stop a remote peer from crashing rqbit: deeply nested bencode, an out-of-range ut_metadata request, and a panic in the incoming-connection listener. It also adds socks5h:// proxies, fixes BEP 52 hybrid torrents that couldn't be added, and fixes a web UI bug that cut output folder names at #.
Library users: PeerConnectionOptions has a new max_request_window field. If you build that struct with every field listed instead of using ..Default::default(), add the new field.
Features
- Support
socks5h://proxy URLs by @jpds in #683 - Make the per-peer request window configurable by @melkir in #687
- Stats: count connected peers that have the full torrent by @zond in #649
Crash and security fixes
- bencode: limit deserializer recursion depth (remote stack-overflow abort) by @tweedge in #660
- Fix off-by-one in ut_metadata bounds check (remote panic) by @MarcelCoding in #704
- Don't panic in listener accept by @ikatson in #674
Fixes
- Torrents: don't reject duplicate
.pad/<length>filenames, so BEP 52 hybrid torrents can be added, by @tweedge in #701 - Web UI: output folder no longer truncated at
#when adding torrents, by @qnfm in #710 - Docker: make the CA cert bundle world-readable, so the image runs as a non-root user, by @Allypost in #712
- Route blocklist/allowlist downloads through the proxied client by @jpds in #669
- Peers: detect capabilities from the handshake on incoming connections by @zond in #651
- Peers: accept an extended handshake missing the
mdictionary by @jpds in #684 - Peers: read the handshake until it is complete by @ArshPunisher in #699
- DHT: fix duplicate
request_onecall by @moshen in #646 - DHT: keep the worker alive after a per-datagram recv error on Windows by @nickEatsBread in #690
- LSD: cancel the announce task once the torrent is removed by @lvella in #700
- Storage: write past 2 GiB where pwritev takes a 32-bit
off_tby @zond in #661 - Windows: mark files sparse regardless of the log level by @tvollstaedt in #681
- Release the state lock before
update_only_filestouches the peer table by @zond in #659 - Take a piece out of the download queue once we have it by @zond in #655
- Only treat 40-character hex strings as info hashes by @melkir in #688
- Streaming: wait for the initial check in
ManagedTorrent::streamby @melkir in #689 - Storage API: don't lose
is_type_idthrough boxing and wrapping (#652), forwardpwrite_all_vectoredthroughBox(#654), and forwardon_piece_completedthrough the storage middlewares (#653), all by @zond - Core:
CurrentPiece::piece_offsetis now the offset within the piece by @MemoDo-En in #695 - Build: use
.PHONYinstead of@PHONYin Makefiles by @TUKAIL in #676 - Dependencies updated (#716)
New Contributors
@moshen, @zond, @tweedge, @jpds, @TUKAIL, @tvollstaedt, @melkir, @nickEatsBread, @ArshPunisher, @MarcelCoding, @Allypost, @qnfm, @lvella and @MemoDo-En made their first contributions. Thank you!
Full Changelog: v9.0.1...v9.1.0