• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

Gallopsled / pwntools / 28302748167
74%

Build:
DEFAULT BRANCH: dev
Ran 27 Jun 2026 09:55PM UTC
Jobs 1
Files 152
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

27 Jun 2026 09:42PM UTC coverage: 73.932% (-0.05%) from 73.979%
28302748167

push

github

web-flow
fix: replace bare except with except Exception (#2743)

* fix: improve exception handling in process.py and adb.py

- process.py: restore bare except with pylint disable (intentional: catches
  non-Exception errors during Python interpreter shutdown)
- adb.py: use specific (OSError, EOFError) instead of broad except Exception

* fix: add missing import for remote in adb.py

The bare except was silently catching NameError from the missing
remote import. Added 'from pwnlib.tubes.remote import remote' to
fix the actual underlying bug.

* docs: add changelog entry for PR #2743

* docs: move changelog reference link near 5.0.0 release section

* fix: catch PwnlibException in emulator AVD name lookup

The bare except was catching PwnlibException raised by remote() when
connection fails. Replacing with except (OSError, EOFError) caused
PwnlibException to propagate, potentially causing retry loops in
Android CI.

Fix by adding PwnlibException to the exception tuple.

* fix: prevent __getattr__ infinite recursion with context.device setter

When context.device setter accesses device.arch, it triggers AdbDevice's
__getattr__ (instead of the arch property). __getattr__ then calls
context.local(device=self), which triggers the setter again, causing
infinite recursion.

Fix: check if the attribute exists on the class via MRO.__dict__
before entering the context.local() path. This lets Python's normal
property resolution handle class-defined attributes.

* revert: remove __getattr__ MRO guard

Peace-maker correctly points out that __getattr__ is only called when
normal attribute lookup fails, so the MRO guard is unnecessary.
The infinite recursion is a pre-existing bug unrelated to this PR.

* Assign to `_avd` instead of `avd`

---------

Co-authored-by: mshzy <mshzy@users.noreply.github.com>
Co-authored-by: peace-maker <peacemakerctf@gmail.com>

3951 of 6626 branches covered (59.63%)

4 of 6 new or added lines in 2 files covered. (66.67%)

17 existing lines in 6 files now uncovered.

13616 of 18417 relevant lines covered (73.93%)

0.74 hits per line

Uncovered Changes

Lines Coverage ∆ File
1
70.64
0.31% pwnlib/adb/adb.py
1
73.91
0.0% pwnlib/tubes/process.py

Coverage Regressions

Lines Coverage ∆ File
6
56.64
-1.17% pwnlib/dynelf.py
3
62.5
-7.5% pwnlib/atexception.py
3
75.54
-1.63% pwnlib/memleak.py
3
81.87
-0.18% pwnlib/tubes/tube.py
1
70.64
0.31% pwnlib/adb/adb.py
1
73.91
0.0% pwnlib/tubes/process.py
Jobs
ID Job ID Ran Files Coverage
1 28302748167.1 27 Jun 2026 09:55PM UTC 152
73.93
GitHub Action Run
Source Files on build 28302748167
  • Tree
  • List 152
  • Changed 7
  • Source Changed 0
  • Coverage Changed 7
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses
  • Back to Repo
  • 09fbd3a6 on github
  • Prev Build on dev (#28238371862)
  • Next Build on dev (#28306512071)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc