Skip to content

deps: bump surge-ping from 0.8.4 to 0.9.1 - #15

Merged
BKPepe merged 1 commit into
masterfrom
dependabot/cargo/surge-ping-0.9.1
Sep 21, 2026
Merged

BKPepe merged 1 commit into
masterfrom
dependabot/cargo/surge-ping-0.9.1

Conversation

@dependabot

@dependabot dependabot Bot commented on behalf of github Sep 21, 2026

Copy link
Copy Markdown
Contributor

Bumps surge-ping from 0.8.4 to 0.9.1.

Release notes

Sourced from surge-ping's releases.

v0.9.1

A bug-fix release. No public API was changed or removed.

Five defects broke the "one Client, many concurrent targets" use case that examples/multi_ping.rs is built on, and two more made ICMP error replies undeliverable. The whole test suite passed before these fixes: it covered the code, but not the guarantees.

Fixed

  • Dropping one Client clone broke every other clone. Client::drop marked the shared reply map destroyed unconditionally, so releasing any clone made the survivors fail with ClientDestroyed. The socket, reply map and receiving task now live in one Arc and are torn down only with the last handle — which also removes a race that could leak the receiving task when two clones were dropped concurrently.
  • A duplicate request destroyed the one already in flight. Registering a second waiter for the same (host, identifier, sequence) replaced the first one's sender, so the original ping failed with NetworkError. The existing waiter is now left untouched.
  • A cancelled ping leaked its registration, so that sequence number stayed unusable and the reply map grew without bound.
  • Dropping a Pinger cancelled unrelated requests. Cleanup was keyed by (host, identifier, sequence) alone, so a finished Pinger could unregister whichever request held that key.
  • Requests in flight waited out their timeout when the last Client was dropped, then reported NetworkError. They now return ClientDestroyed immediately.
  • ICMP errors never reached the request waiting for them. Time exceeded, destination unreachable and friends are sent by an intermediate router, but were routed on that router's address instead of the target quoted inside the error, so they surfaced as timeouts. A TTL-limited probe depends on this.
  • The quoted echo header was assumed to be at a fixed offset, so IPv4 header options or IPv6 extension headers shifted the identifier and sequence out from under the parser.
  • The IPv6 identifier and sequence were read 4 bytes early, off the quoted ICMPv6 type, code and checksum.

Added

  • IcmpPacket::real_destination() — the address the request being answered was originally sent to.

Internal

  • Regression tests for each fix. The reply-map, guard and packet-decoding tests open no socket and are fully deterministic.
  • A GitHub Actions workflow: rustfmt, clippy, docs, MSRV 1.85.0, cargo audit, and a build matrix over Linux, macOS and Windows.

Full notes in CHANGELOG.md.

Full Changelog: kolapapa/surge-ping@0.9.0...0.9.1

v0.9.0

What's Changed

Breaking changes

  • MSRV raised to 1.85.0 and crate migrated to edition 2024.
  • socket2 0.50.6 — this type is exposed through the public API (AsyncSocket::get_type() returns socket2::Type), so downstream code matching on it may need updates.

Dependency updates

  • thiserror 12
  • rand 0.90.10
  • pnet_packet 0.340.35
  • pretty_env_logger (dev) 0.40.5

Improvements

  • Clearer permission-denied error message when creating an ICMP socket on Linux, with guidance on enabling non-privileged ICMP (ping_group_range) or granting CAP_NET_RAW.
  • Socket-type fallback logic refactored for clarity.
  • ICMP now derives PartialEq/Eq.

Tests

  • Added unit tests for config, error, and core modules, plus integration tests.

... (truncated)

Changelog

Sourced from surge-ping's changelog.

[0.9.1] - 2026-09-16

A bug-fix release. No public API was changed or removed.

Fixed

  • Dropping one Client clone no longer breaks the others. Client::drop marked the shared reply map destroyed unconditionally, so releasing any clone made every surviving clone fail with ClientDestroyed — the pattern examples/multi_ping.rs is built on. The socket, reply map and receiving task now live in one Arc and are torn down only when the last handle goes. This also removes a race where two clones dropped concurrently could leave the receiving task running.
  • A duplicate request no longer destroys the request already in flight. Registering a second waiter for the same (host, identifier, sequence) replaced the first one's sender, so the original ping failed with NetworkError while the duplicate got IdenticalRequests. The existing waiter is now left untouched.
  • A cancelled ping releases its sequence number. Cancelling the future used to leave the registration behind, leaking memory and making that sequence unusable until the Pinger was dropped.
  • Dropping a Pinger no longer cancels an unrelated request. Cleanup was keyed by (host, identifier, sequence) alone, so a finished Pinger could unregister whichever request held that key at the time, failing it with NetworkError.
  • Requests in flight end as soon as the last Client is dropped. They used to stay parked until their own timeout expired and then report NetworkError; they now return ClientDestroyed immediately.
  • ICMP errors reach the request waiting for them. Time exceeded, destination unreachable and similar errors are sent by an intermediate router, but were routed on that router's address rather than on the target quoted inside the error, so they surfaced as timeouts. This is what a TTL-limited probe depends on.
  • The quoted echo header is located correctly when the original packet carried IPv4 header options or IPv6 extension headers. Its offset was assumed fixed, so the identifier and sequence were read out of the options or the extension headers.
  • The IPv6 identifier and sequence are read from the right offset. They were taken 4 bytes early, off the quoted ICMPv6 type, code and checksum.
  • Icmpv6Packet::get_real_dest is now set for ICMPv6 error messages; it previously kept its ::1 default.

Added

  • IcmpPacket::real_destination() — the address the request being answered was originally sent to. For an echo reply this is the sender; for an ICMP error it is read out of the request quoted inside the error.

Internal

... (truncated)

Commits
  • 641dda8 test: stop assuming the platform keeps the identifier hint
  • 8da7bd7 chore(release): bump version to 0.9.1
  • 3b2d6fb ci: add GitHub Actions workflow
  • 3c7e92b fix: correct concurrency and ICMP error routing defects
  • ba11a19 style: apply rustfmt and fix clippy warnings
  • 17a0873 docs: rewrite README and add architecture diagram
  • 47a97e2 chore(release): bump version to 0.9.0
  • 1548035 test: fix always-true assertion and remove unused import
  • 5711b21 Merge pull request #51 from PitiBouchon/update_rand_crate
  • 8d59233 Merge branch 'main' into update_rand_crate
  • Additional commits viewable in compare view

@dependabot dependabot Bot added dependencies Pull requests that update a dependency file rust Pull requests that update rust code labels Sep 21, 2026
@BKPepe

BKPepe commented Sep 21, 2026

Copy link
Copy Markdown
Member

@dependabot rebase

Bumps [surge-ping](https://github.com/kolapapa/surge-ping) from 0.8.4 to 0.9.1.
- [Release notes](https://github.com/kolapapa/surge-ping/releases)
- [Changelog](https://github.com/kolapapa/surge-ping/blob/main/CHANGELOG.md)
- [Commits](kolapapa/surge-ping@0.8.4...0.9.1)

---
updated-dependencies:
- dependency-name: surge-ping
  dependency-version: 0.9.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
@dependabot
dependabot Bot force-pushed the dependabot/cargo/surge-ping-0.9.1 branch from 39070e2 to a059533 Compare September 21, 2026 20:27
@BKPepe
BKPepe merged commit 90e8486 into master Sep 21, 2026
21 of 23 checks passed
@dependabot
dependabot Bot deleted the dependabot/cargo/surge-ping-0.9.1 branch September 21, 2026 20:40
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Pull requests that update a dependency file rust Pull requests that update rust code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant