Skip to content

reliability: guard crash paths in DHCP/network teardown#3291

Open
geraldo-netto wants to merge 2 commits into
blueman-project:mainfrom
geraldo-netto:reliability/crash-guards
Open

reliability: guard crash paths in DHCP/network teardown#3291
geraldo-netto wants to merge 2 commits into
blueman-project:mainfrom
geraldo-netto:reliability/crash-guards

Conversation

@geraldo-netto

Copy link
Copy Markdown

Several teardown and error paths could raise before doing their work:

  • DhcpClient: self._client was undefined until run(), so _check_client() and _on_timeout() raised AttributeError if reached early. Initialise it to None and bail out when there is no client. Also fix the timeout check: poll() returning 0 (a clean exit) was treated like "still running" via not poll(); only terminate when poll() is None.
  • mechanism Network: EnableNetwork indexed DHCPDHANDLERS with the caller's string, raising KeyError on an unknown handler. Validate the key and raise a clear ValueError before touching NetConf.
  • NetConf: DHCPHandler.clean_up() used next() without a default, so an empty match raised StopIteration and aborted the rest of cleanup. Supply a default.
  • Rfcomm: OpenRFCOMM now logs and re-raises if spawning the watcher fails instead of failing opaquely.

Add unit + fuzz coverage for each guard. Tests need no D-Bus or display.

geraldo-netto and others added 2 commits June 2, 2026 12:37
Several teardown and error paths could raise before doing their work:

- DhcpClient: self._client was undefined until run(), so _check_client() and
  _on_timeout() raised AttributeError if reached early. Initialise it to None
  and bail out when there is no client. Also fix the timeout check: poll()
  returning 0 (a clean exit) was treated like "still running" via
  `not poll()`; only terminate when poll() is None.
- mechanism Network: EnableNetwork indexed DHCPDHANDLERS with the caller's
  string, raising KeyError on an unknown handler. Validate the key and raise a
  clear ValueError before touching NetConf.
- NetConf: DHCPHandler.clean_up() used next() without a default, so an empty
  match raised StopIteration and aborted the rest of cleanup. Supply a default.
- Rfcomm: OpenRFCOMM now logs and re-raises if spawning the watcher fails
  instead of failing opaquely.

Add unit + fuzz coverage for each guard. Tests need no D-Bus or display.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@sonarqubecloud

sonarqubecloud Bot commented Jun 3, 2026

Copy link
Copy Markdown

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant