Skip to content

fix(overlay): prevent usize underflow infinite loop in draw_text#55

Merged
ferjm merged 1 commit into
mainfrom
bbox-guards
Jun 30, 2026
Merged

fix(overlay): prevent usize underflow infinite loop in draw_text#55
ferjm merged 1 commit into
mainfrom
bbox-guards

Conversation

@ferjm

@ferjm ferjm commented Jun 30, 2026

Copy link
Copy Markdown
Member

A detection whose label origin falls outside the overlay frame (e.g. a box that regressed just past the right edge, x=646 on a 640px frame) clamped copy_x_end below copy_x_start. The pixel-copy loop then computed copy_x_end - copy_x_start on usize, underflowing to ~2^64 and spinning a CPU core forever. Being inline, this backpressured the camera tee, froze the frame ring buffer, and froze every downstream consumer (HMI preview, frame capture). The same hazard existed on the y axis for labels past the bottom edge.

Add clamp_copy_region(), which clamps the copy region in signed space and returns None when the label is entirely off-frame, guaranteeing start <= end so the unsigned subtraction can never underflow. Bail out of draw_text early when the origin is past the right/bottom edge. Add unit tests covering the regression and the straddling/off-frame edge cases.

A detection whose label origin falls outside the overlay frame (e.g. a box
that regressed just past the right edge, x=646 on a 640px frame) clamped
copy_x_end below copy_x_start. The pixel-copy loop then computed
copy_x_end - copy_x_start on usize, underflowing to ~2^64 and spinning a CPU
core forever. Being inline, this backpressured the camera tee, froze the
frame ring buffer, and froze every downstream consumer (HMI preview,
frame capture). The same hazard existed on the y axis for labels past the
bottom edge.

Add clamp_copy_region(), which clamps the copy region in signed space and
returns None when the label is entirely off-frame, guaranteeing
start <= end so the unsigned subtraction can never underflow. Bail out of
draw_text early when the origin is past the right/bottom edge. Add unit
tests covering the regression and the straddling/off-frame edge cases.
@ferjm ferjm merged commit ded2a04 into main Jun 30, 2026
2 checks passed
@ferjm ferjm deleted the bbox-guards branch June 30, 2026 17:06
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