Skip interfaces that have no address - #25
Merged
Merged
Conversation
getifaddrs reports an entry with a null ifa_addr for an interface that has no address assigned, such as a tunnel, so reading sa_family through it trapped while enumerating. Android already guarded for this; every platform needs it.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
getifaddrsreports an entry with a nullifa_addrfor an interface that has no address assigned — a tunnel device, for instance.NetworkInterface.interfacesreadsa_familystraight through that pointer, so enumerating interfaces trapped with "Unexpectedly found nil while implicitly unwrapping an Optional value" on any host that has one.The
#if os(Android)branch immediately above already handled exactly this case; the fix is to use that form on every platform and delete the branch. The line just below (value.ifa_addr.flatMap { ... }) already treated the pointer as nullable, so this makes the two consistent.Testing
Reproduces on a machine with a tailscale interface:
swift testcrashed the test process atNetworkInterface.swift:58, taking down the whole run.With the fix,
swift test --no-parallelpasses 25/25 on Linux — the threetestNetworkInterface*tests now run rather than aborting the process, which is why the count is up from the 22 that previously survived.CI never caught this because the GitHub runners have no addressless interface.