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

ossia / libossia / 33336873879
52%

Build:
DEFAULT BRANCH: master
Ran 30 Aug 2026 10:20PM UTC
Jobs 1
Files 507
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

30 Aug 2026 09:35PM UTC coverage: 51.376% (+0.08%) from 51.3%
33336873879

push

github

jcelerier
editor: stop expression observation in time_sync reset() and set_expression()

time_sync::reset() only cleared m_observe and left the dummy expression
callback registered, so after a scenario stop (scenario::stop,
reset_subgraph, exclusive-mode resets) a not-yet-fired trigger's
expression atom stayed subscribed to the device parameters it observes.
Destroying a device before the scenario graph then made
~expression_atom -> on_removing_last_callback() -> parameter
remove_callback() read freed memory: the heap-use-after-free seen on a
174-score ASan corpus run in ossia/score
(#0 callback_container.hpp:117,
 #1 expression_atom.cpp:118, freed by ~generic_parameter).

set_expression() also replaced the expression while m_callback could
still be engaged (reset() used to leave it so), leaving m_callback
pointing into the destroyed expression's callback storage; the next
observe_expression() handed that stale iterator to the new expression's
remove_callback.

Both paths now detach the stored callback from the expression first.

The callback_container hook pairing itself is sound:
on_first_callback_added / on_removing_last_callback fire exactly on the
0<->1 size transitions, so no guard was added there; the control test
documents that.

The new ExpressionObservationLifetimeTest was verified to fail before
the fix under ASan (heap-use-after-free with the corpus frames for the
reset case; out-of-range static_vector erase aborts for the stale
iterator cases) and passes after.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014rZgzE8JjWvHDtaVUhxpLE

64 of 64 new or added lines in 2 files covered. (100.0%)

1 existing line in 1 file now uncovered.

30611 of 59582 relevant lines covered (51.38%)

178415.55 hits per line

Coverage Regressions

Lines Coverage ∆ File
1
65.97
-0.69% src/ossia/network/sockets/websocket_server.hpp
Jobs
ID Job ID Ran Files Coverage
1 33336873879.1 30 Aug 2026 10:20PM UTC 507
51.38
GitHub Action Run
Source Files on build 33336873879
  • Tree
  • List 507
  • Changed 7
  • Source Changed 0
  • Coverage Changed 7
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • e2e93289 on github
  • Prev Build on master (#32725301836)
  • Next Build on master (#33885586992)
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