The RPC server accepted any URL starting with /transmission/rpc,
including /transmission/rpc/xyz and /transmission/rpcx. Changed
the prefix check (tr_strv_starts_with) to an exact match so that
only /transmission/rpc is accepted.
* refactor: mark cache_size_mib as deprecated in RPC
* refactor: make RPC session_set cache_size_mib a no-op
* refactor: tr_ioRead(), tr_ioWrite() now take a std::span
* refactor: add BufferReader::to_buf(std::span<uint8_t>)
* refactor: migrate some methods to to_buf(std::span<uint8_t>)
* refactor: remove the write memory cache
* chore: simplify recalculate_hash()
* refactor: simplify span use in tr_peerMsgsImpl::read_piece_data()
* refactor: move `tr_variant::value_if<int64_t>()` to header and constexpr
* refactor: move `tr_variant::value_if<bool>()` to header and constexpr
* refactor: move `tr_variant::value_if<std::string_view>()` to header and constexpr
* refactor: remove tr_torrentsQueueMoveTop() from public API
refactor: remove tr_torrentsQueueMoveUp() from public API
refactor: remove tr_torrentsQueueMoveDown() from public API
refactor: remove tr_torrentsQueueMoveBottom() from public API
* refactor: remove unused tr_torrentGetQueuePosition()
* refactor: use the same salter everywhere
* fix: re-create candidate when got bad block if needed
* refactor: housekeeping
* fix: emit bad piece signal after all bookkeeping
* refactor: add a Torrent.id property
* feat: add Controller.torrentForId
* refactor: make tr_session_idle_limit_hit_func a std::function
* refactor: make tr_session_metadata_func a std::function
* refactor: make tr_session_ratio_limit_hit_func a std::function
* refactor: make tr_torrent_completeness_func a std::function
* refactor: make tr_altSpeedFunc a std::function
* refactor: make tr_sessionSetQueueStartCallback callback a std::function
* refactor: make tr_rpc_callback_status callback a std::function
* refactor: remove user_data arg from tr_torrent_rename_done_func
* refactor: harden `tr_torrentFindFromId()` by making it safe to pass in a nullptr session
* ci: infra for parallel clang-tidy runs
* ci(gtk): run clang-tidy
* chore(gtk): silence warnings
* code review: use constexpr auto
* code review: use constants over magic numbers in Utils.cc
* code review: use `std::ignore` to ignore return value
* code review: add back visibility labels that indicated sections
* fix: wrap each command argument in single quotes
* fix: mask non-UTF-8 characters in torrent file paths
BEP-3 requires strings to be UTF-8. Run path components through
tr_strv_to_utf8_string() to replace invalid bytes with U+FFFD
before sanitizing. Adds test with good and bad UTF-8 paths.
* replace ctrl characters in 'name' and 'path'
* Revert "replace ctrl characters in 'name' and 'path'"
This reverts commit 6816f59295.
* fix: mask non-UTF-8 characters in torrent file paths
BEP-3 requires strings to be UTF-8. Run path components through
tr_strv_to_utf8_string() to replace invalid bytes with U+FFFD
before sanitizing. Adds test with good and bad UTF-8 paths.
* replace ctrl characters in 'name' and 'path'
* Revert "replace ctrl characters in 'name' and 'path'"
This reverts commit 6816f59295.
* prepare for future Bittorrent v2 usage