Repository navigation
v1.12.0
Security & correctness
-
Truncated transfers are no longer accepted as success. A malicious sender could declare one size and then send fewer bytes — the receiver used to save the partial file and report success. It now fails with a clear error and discards the partial. Caught by a new hostile-peer test.
-
Tighter memory limits on hostile input. A single 40-byte chunk header made the receiver pre-allocate up to 65535 segment slots (~3 MiB). Memory now grows with the bytes actually received.
-
LAN discovery hardening. Multicast sockets no longer leak on startup failures; spoofed mDNS answers pointing the receiver at an arbitrary host are dropped; and fsend announces only real LAN hardware — never VPN or Docker addresses.
Reliability
- Same-network discovery now just works. Finding a sender on the same Wi-Fi used to be a coin flip: it succeeded 30–70% of the time, occasionally hung, and transfers quietly fell back to the pairing server. The causes were a library bug that could stall a discovery query forever, and macOS's Local Network privacy blocking multicast on the Wi-Fi interface. Discovery now tries this machine first (instant), then the LAN on a separate socket, skipping virtual interfaces — and reports honestly when the OS blocks it. Measured: 10/10 successes at ~2 ms.
Verification & UX
-
SHA-256 verification. The receiver prints the SHA-256 of what it saved — compare it against
shasum -a 256on the sender. Resumed transfers hash the whole file.--manifestgains asha256column. -
New
fsend doctor. One command checks everything a transfer depends on: server reachability, the LAN address fsend would use, and a live mDNS roundtrip. Always exits 0, and explains any degradation — e.g. if macOS blocked multicast, it says other-device discovery falls back to the pairing server. -
Route chip. The progress bar shows where the bytes are going:
LAN / direct / relay. -
Completion notification. A bell + desktop notification when a transfer finishes; off with
--quiet.
Dependencies
- Updated the network stack (pion mdns/ice/dtls/turn, including the stun v4 migration) and the golang.org/x libraries.
Upgrading
- CLI:
fsend --update(orbrew upgrade fsend). No flag or config changes. - Self-hosted: no configuration changes; update the server alongside the clients to pick up the same dependency fixes.