Scott Pope
728790a2b4
Parse multicall commands once per call
...
Keep the change to d, f, p and t multicalls. Parse each column lazily on first use and evaluate it through rpc::call_object, preserving per-target argument expansion.
Compared unpatched and patched builds on macOS: output was byte-identical across the test harness, including an erase-mid-call check.
2026-10-06 11:19:48 +02:00
Nicolas PARLANT
e652a3cbab
add missing header
...
cstdint for uint32_t
2026-10-05 16:59:00 +02:00
rakshasa
15ccae27de
Tagged release 0.16.25.
v0.16.25
2026-10-05 08:42:50 +02:00
Silas Mariusz
4c0535b1fa
Align the XML-RPC command stack so torrent::Object is not constructed on a 4-byte boundary.
2026-10-04 13:37:01 +02:00
Jari Sundell
d59765fda4
Added legacy UTF-8 torrent name and path handling.
2026-10-04 20:36:29 +09:00
Silas Mariusz
66c49d24e5
Use heap allocated buffer for rpc::ExecFile::execute_object() and increase size to 128Kb.
2026-10-04 10:18:58 +02:00
rakshasa
3af0410a6e
Restrict parse value to strtoll with restrictions on input.
2026-10-01 10:32:43 +02:00
rakshasa
3c94b03323
Restrict parse value to strtoll with restrictions on input.
2026-10-01 10:32:43 +02:00
rakshasa
c5d54fbb97
Restrict parse value to strtoll with restrictions on input.
2026-10-01 10:32:43 +02:00
Silas Mariusz
44d51171e1
Mark the system.file.allocate getter untrusted-safe, because d.open reads it.
2026-09-30 10:55:48 +02:00
noctuum
dc916278c2
Do not switch an active download to initial_seed
...
`confirm_finished` did, and the `input_error` reached `main`.
2026-09-29 10:51:58 +02:00
noctuum
366b936ded
Check m_entry against size() in set_entry
2026-09-29 10:18:35 +02:00
noctuum
8bcc4c6e92
Read the unpacked object in the raw string case
...
A list holding one raw string reached this case and threw on `src`.
2026-09-29 10:00:30 +02:00
noctuum
5421a35349
Remove code that has no remaining user
...
Three declarations had no definition and the rest had no user left.
2026-09-28 18:40:17 +02:00
noctuum
d5ce0984fc
Reset the freed pointers in XmlRpc::cleanup
...
`is_valid()` tests `m_env`, so it stayed true after `cleanup()`.
2026-09-28 18:01:05 +02:00
noctuum
a89ce3cd7b
Check first against last in parse_object
...
A command ending in `=` reaches it with an empty range.
2026-09-28 17:34:06 +02:00
noctuum
d98a441dc4
Sort the transfer chunks by index
...
The default comparison ordered the pointers, not the chunk indexes.
2026-09-28 17:11:08 +02:00
noctuum
fc6e57c3fa
Check pthread_sigmask by its return value
...
`pthread_sigmask` returns the error number and does not set `errno`.
2026-09-28 16:46:02 +02:00
noctuum
8e23ba8b17
Reject an empty argument list in execute_lua
...
`lua.execute` with no arguments dereferenced `args.begin()`.
2026-09-28 11:36:53 +02:00
noctuum
e656801cfa
Limit tab completion to text before the cursor
...
`substr` takes a count, so the text after the cursor joined the prefix.
2026-09-28 11:00:25 +02:00
noctuum
9f6fd7994e
Guard control in the main catch handlers
...
A start without HOME throws before control is constructed.
2026-09-28 10:46:13 +02:00
noctuum
bb77aa644c
Stop at max_active in scheduler.simple.removed
...
The limit was checked once, then every download was resumed.
2026-09-28 10:28:46 +02:00
xirvik
83a5e7687b
Sync the session directory after committing the renames
...
Syncing the files alone does not make the new names survive a crash.
2026-09-25 09:31:08 +02:00
Jari Sundell
910b9b35fc
Reorder mutex and atomic variable declarations
2026-09-25 08:52:56 +02:00
xirvik
e3051df78c
Give SessionManager::m_active its own cache line
...
Prevents false sharing with the adjacent m_mutex under concurrent access.
2026-09-25 08:52:56 +02:00
xirvik
21287a1355
Make SessionManager::m_active atomic
...
It is written under m_mutex but read under m_pending_builds_mutex in one place.
2026-09-25 08:52:56 +02:00
xirvik
6471dc181e
Guard the download against handlers that erase it mid-close
...
Track a weak_ptr lifetime handle and make erase ignore re-entrant erase.
2026-09-24 10:22:40 +02:00
xirvik
a5c39566c8
Write session files with O_NOFOLLOW and mode 0600
...
Also make directory_entry::is_file() report the real type so symlinks are skipped.
2026-09-24 09:52:03 +02:00
xirvik
019c16a077
rpc: multicall requires methodName as the struct's first member
...
Faults clearly instead of the confusing positional parse error it replaces.
2026-09-24 09:20:25 +02:00
xirvik
439d23ce62
Bound JSON-RPC input by size and nesting depth
...
Enforce the nesting bound in one parse, capping allocation by depth, not input size.
2026-09-23 09:25:25 +02:00
xirvik
83b03c2c1e
Range-check global throttle rates before narrowing them to kB.
...
Multiplying kB back to bytes in unsigned int wrapped 2^32 to 0, which means unlimited.
2026-09-23 09:01:02 +02:00
rakshasa
05cdd03cd2
Tagged release 0.16.24.
v0.16.24
2026-09-22 15:24:24 +02:00
xirvik
d1a6942ea7
Keep the object_storage key terminator inside the key buffer
...
find_raw_string now honours the raw_string size instead of scanning for a nul.
2026-09-21 09:22:26 +02:00
xirvik
3652329e2d
Pass the typed download filter as an argument, not command text
...
A pattern containing '}' closed the match command early and ran the rest as commands.
2026-09-20 16:39:14 +02:00
xirvik
7916e6022f
Stop the value command on the untrusted-safe allowlist crashing the daemon
...
glibc leaves endptr unset for a small invalid base; ERANGE throws instead of clamping.
2026-09-20 15:58:47 +02:00
xirvik
c59da0848e
Dump the ipv4 filter by reference instead of copying the whole map
...
A static table owns the map; the loop only reads it on the main thread. No test needed.
2026-09-20 15:33:09 +02:00
xirvik
e2f66ff08c
Drop the address range parser and its includes, dead since 29edda2f
...
External linkage kept -Wunused-function quiet; a deletion of dead code needs no test.
2026-09-20 15:01:44 +02:00
xirvik
f0b6f2cb47
Fail p.multicall when a command changes the connection list
...
Disconnecting a peer frees it and reorders the list, so the iteration cannot continue.
2026-09-20 14:05:49 +02:00
xirvik
d334b8d339
Stop printing a strerror of si_errno in the SIGBUS dump
...
Linux leaves si_errno zero there, so the line always read Error: Success.
2026-09-20 10:05:55 +02:00
xirvik
19b71a98b7
Fix data race reading the log buffer from the display thread
...
Copy entries under the buffer lock before rendering; other threads mutate the deque.
2026-09-20 09:42:59 +02:00
xirvik
8ee3b984dd
Give network.xmlrpc.size_limit.set a floor
...
A limit below any valid request rejects the request that would raise it again.
2026-09-20 09:23:12 +02:00
xirvik
4e7129c71c
Keep starting when the DHT cache file is rejected
...
The router could throw while loading it, stopping rtorrent from starting at all.
2026-09-20 08:53:34 +02:00
xirvik
80ae6a4590
Answer an oversized RPC response with a fault
...
Cap XML-RPC and JSON-RPC output at the SCGI response limit before handing it over.
2026-09-19 18:04:09 +02:00
xirvik
2086e8e780
Check the argument count before indexing config comment log args
...
A '# do:log.add_output=debug' line read args[1] past the end of the vector.
2026-09-19 12:13:43 +02:00
xirvik
d9439d7a95
Dispatch view.event_added over the added half of the changed range
...
fb75510 pointed it at the removed half, so it fired on departing downloads instead.
2026-09-19 11:41:58 +02:00
noctuum
0d3404576a
Reject a throttle rate that overflows
...
rate * 1024 wraps to zero at 2^54, which means no limit.
2026-09-19 11:11:00 +02:00
noctuum
84a0d86f2c
Own the fault string in xmlrpc_error_c
...
xmlrpc_env_set_fault frees the buffer the pointer came from.
2026-09-19 10:34:46 +02:00
noctuum
1b15b7c518
Report a failed write in log.vmmap.dump
...
The dump is only flushed at fclose, whose result was discarded.
2026-09-19 10:11:23 +02:00
noctuum
b1be898ba1
Reject an over-long or empty object_storage key
...
key_type stores a key of key_size or longer as the empty key.
2026-09-18 16:54:48 +02:00
Jari Sundell
bd00b5f6fe
Use explicit device name binding rather than a custom syntax.
2026-09-18 23:19:43 +09:00