Skip to content

fix: validate LED group_repeats 1-254 and tolerate raw 0xFF on parse (M11)#106

Merged
g4bri3lDev merged 1 commit into
OpenDisplay:mainfrom
balloob:fix/led-flash-repeats
Jul 5, 2026
Merged

fix: validate LED group_repeats 1-254 and tolerate raw 0xFF on parse (M11)#106
g4bri3lDev merged 1 commit into
OpenDisplay:mainfrom
balloob:fix/led-flash-repeats

Conversation

@balloob

@balloob balloob commented Jul 4, 2026

Copy link
Copy Markdown
Contributor

Summary

M11 — LedFlashConfig(group_repeats=255) silently means "repeat forever" (🟠)

group_repeats is encoded as group_repeats - 1, and raw 0xFE is the firmware's infinite sentinel. The old 1..255 range allowed group_repeats=255, which encodes to 0xFE — so a request for 255 finite repeats looped forever. The finite range is now capped at 254.

Converse (🟡) — from_bytes(raw 0xFF) raised

from_bytes decoded raw 0xFF to 256, which the constructor then rejected, so parsing a firmware-valid payload raised. 0xFF (never emitted by our encoder) is now treated like the 0xFE unbounded sentinel, so from_bytes never raises.

Test plan

  • uv run pytest -q → 446 passed (3 new: 255 rejected, 254 is max finite → raw 253, from_bytes(0xFF) parses to None without raising)
  • ruff, mypy clean

🤖 Generated with Claude Code

@balloob balloob requested a review from g4bri3lDev as a code owner July 4, 2026 07:18
@codecov

codecov Bot commented Jul 4, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

…(M11)

group_repeats is encoded as group_repeats-1, and raw 0xFE is the firmware's
infinite sentinel. The old 1-255 range let group_repeats=255 encode to 0xFE,
so a request for 255 finite repeats looped forever. Cap the finite range at 254.

Conversely, from_bytes decoded raw 0xFF to 256, which the constructor then
rejected — so parsing a firmware-valid payload raised. Treat 0xFF (never
emitted by our encoder) like the 0xFE unbounded sentinel so from_bytes never
raises.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JRrm95f1qNZzDM9r2SB6KW
@balloob balloob force-pushed the fix/led-flash-repeats branch from 62a707f to 9d7134e Compare July 4, 2026 11:42
@g4bri3lDev g4bri3lDev merged commit 299c18c into OpenDisplay:main Jul 5, 2026
6 checks passed
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.

2 participants