Skip to content

v5.3.1#3042

Merged
xirvik merged 23 commits intomasterfrom
develop
Apr 23, 2026
Merged

v5.3.1#3042
xirvik merged 23 commits intomasterfrom
develop

Conversation

@xirvik
Copy link
Copy Markdown
Collaborator

@xirvik xirvik commented Apr 23, 2026

v5.3.1

Bug fixes since v5.3.0.

Bug fixes

PHP compatibility

xirvik and others added 23 commits April 22, 2026 18:06
The Update Trackers context menu action sends d.tracker_announce directly
via XMLRPC, which is rejected by rtorrent 0.16.8 untrusted connection
model. Route it through httprpc like start/stop/pause/remove, using a
trusted server-side SCGI connection.
- Bundle geoip2.phar v2.12.1 (MaxMind GeoIP2 PHP library)
- Remove composer autoloader dependency from lookup.php and init.php
- Update conf.php with setup documentation and GeoLite2 default paths
- Users only need to download .mmdb database files from MaxMind

Fixes #3028
Bundle the MaxMind GeoIP2 PHP library as geoip2.phar (v2.12.1) so the plugin works out of the box without composer. Users only need to download .mmdb database files from MaxMind.
Latest and final 2.x release (August 2020). Fixes class name construction
for PHP-Scoper compatibility. Uses Box 4.0.1 for phar generation.
Update the bundled MaxMind GeoIP2 PHP library from v2.12.1 to v2.13.0 — the latest and final 2.x release (August 2020).
On servers without IPv6, api64.ipify.org returns the IPv4 address which
fails IPv6 validation. This logged an error on every page load, spamming
both PHP and nginx error logs. The failure is expected and already handled
by returning null (status -1 to the UI).

Ref: #3018 (comment)
innerHTML destroys event handlers on existing log nodes when saving and
restoring content. Use removeChild/appendChild to preserve node references.
The same message can legitimately occur multiple times (e.g. repeated
warnings, periodic status updates). The dedup prevented these from
being saved.
    Use DOM node manipulation instead of innerHTML — the previous innerHTML save/restore approach destroyed event handlers on existing log nodes. Now uses removeChild/appendChild to preserve node references.

    Remove duplicate message check — the saveLog() function skipped messages that already existed in the log. This prevented legitimate repeated messages (e.g. periodic status updates, repeated warnings) from being saved.

Inspired by #3030 (which also addresses these issues but includes unrelated feature additions).
- Hook the Log tab Clear button to also clear saved log history via
  new ?clear=1 endpoint, so old entries do not reappear on reload
- Make stripTimestamp() null-safe to prevent JS error when replaying
  entries with missing message field

Fixes #3029
Hook the Log tab Clear button to also clear saved log history via new ?clear=1 endpoint, so old entries do not reappear on reload
Make stripTimestamp() null-safe to prevent JS error when replaying entries with missing message field

Fixes #3029
decoct() returns a string which PHP casts to decimal for bitwise AND,
giving wrong results. The default $chmod was decimal 755 instead of
octal 0755. Both caused the function to always return false, breaking
all plugins that check external program permissions.

Fixes #3005, fixes #2987
decoct() returns a string which PHP casts to decimal for bitwise AND, giving wrong results. The default $chmod was decimal 755 instead of octal 0755. Both caused the function to always return false, breaking all plugins that check external program permissions.

Fixes #3005, fixes #2987
- settings.php: (integer) → (int) (deprecated since PHP 8.5)
- _cloudflare/cloudflare.php: backtick operator → shell_exec() (deprecated since PHP 8.5)

Fixes #2992
When dragging a .torrent from Firefox download panel, the browser sends
both a file item and a text/uri-list item. The drop handler was matching
the URI list first and trying to process it as a URL, which failed. Now
checks for file items first and lets the filedrop jQuery plugin handle
them directly.

Fixes #2966
When dragging a .torrent from Firefox's download panel, the browser sends both a file item (application/x-bittorrent) and a text/uri-list item. The drop handler was matching the URI list first and trying to process it as a URL download, which silently failed.

Now checks for file items first and lets the filedrop jQuery plugin handle them directly. URL-only drops (magnet links, torrent URLs from web pages) still work as before.

Fixes #2966
Chrome fires mousemove events on mousedown/mouseup even when the mouse
has not moved (movementX === 0, movementY === 0). This caused the DnD
handler to set isMoving=true on every click, triggering column drag
instead of sort. Guard against zero-movement events in onRun callback.

Previously fixed in PR #1637 but lost during DnD class refactor.

Fixes #3001
Chrome fires mousemove events on mousedown/mouseup even when the mouse hasn't physically moved (movementX === 0, movementY === 0). This caused the DnD handler's onRun callback to set isMoving = true on every click, triggering the column drag path instead of the sort path.

Add a guard to ignore zero-movement events before setting isMoving.

Previously fixed in PR #1637 but lost during the DnD class refactor.

Fixes #3001

Note: Couldn't repro, so maybe Chrome already fixed the issue on their end, but the change is harmless so why not.
Add ./ as the first entry in the directory browser. Single-click selects
the current directory path, double-click confirms and closes the dropdown.
This was present in 5.1.x but lost during the 5.2.x UI refactor.

Fixes #3002
Add ./ as the first entry in the directory browser dropdown. Single-click selects the current directory path, double-click confirms and closes the dropdown.

This was present in 5.1.x but lost during the 5.2.x UI refactor. Without it, users have to click the text field and then click elsewhere to confirm the path.

Fixes #3002
@xirvik xirvik merged commit cc3f4e9 into master Apr 23, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

1 participant