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

stacklok / toolhive / 42800117903
73%

Build:
DEFAULT BRANCH: main
Ran 10 Nov 2026 10:41AM UTC
Jobs 1
Files 1006
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

10 Nov 2026 10:33AM UTC coverage: 72.8% (+0.02%) from 72.782%
42800117903

push

github

web-flow
Refuse client assertions without a positive exp (#7087)

fosite treats an exp of 0 in a private_key_jwt client assertion as
absent and accepts the assertion. It then passes time.Unix(exp, 0) to
the storage backend as the deadline of the jti replay marker. The
backends record a deadline in the past as an already-expired marker, so
the same assertion can be presented again and again. An exp near the
maximum int64 wraps in time.Unix to a deadline in the past, and an
assertion presented in the last second of its life passes fosite's whole
second check while its marker is already gone.

All of these end as a deadline in the past at the storage call, so the
fix judges that value instead of reading the JWT a second time. The
storage handed to fosite's provider is wrapped, and its
SetClientAssertionJWT refuses a deadline that is not in the future with
invalid_client. fosite returns that error unchanged, so clients see the
same 401 as for any other bad assertion. The handler factories keep the
unwrapped storage, and the wrapper forwards PARStorage when the backend
has it.

The rule lives in one function, ValidateClientAssertionExp. The Memory
and Redis backends call it too, so an embedder that builds its own
provider over them gets the same refusal. Redis no longer deletes the
reservation for a past deadline: that deletion was the replay hole. A
refused assertion leaves its 30 second reservation in place.

Co-authored-by: Mecatl <noreply@mecatl.dev>

26 of 26 new or added lines in 4 files covered. (100.0%)

2 existing lines in 2 files now uncovered.

93991 of 129109 relevant lines covered (72.8%)

857.38 hits per line

Coverage Regressions

Lines Coverage ∆ File
1
94.26
0.02% pkg/authserver/storage/memory.go
1
88.02
-0.12% pkg/transport/proxy/transparent/transparent_proxy.go
Jobs
ID Job ID Ran Files Coverage
1 42800117903.1 10 Nov 2026 10:41AM UTC 1006
72.8
GitHub Action Run
Source Files on build 42800117903
  • Tree
  • List 1006
  • Changed 9
  • Source Changed 3
  • Coverage Changed 9
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #42800117903
  • b36d370c on github
  • Prev Build on main (#42797212494)
  • Next Build on main (#42804602634)
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