Skip to content

Don't crash when consuming arbitrary random data. - #210

Open
jonathanslenders wants to merge 1 commit into
selectel:masterfrom
jonathanslenders:handle-arbitrary-random-data
Open

Don't crash when consuming arbitrary random data.#210
jonathanslenders wants to merge 1 commit into
selectel:masterfrom
jonathanslenders:handle-arbitrary-random-data

Conversation

@jonathanslenders

@jonathanslenders jonathanslenders commented Mar 19, 2026

Copy link
Copy Markdown

Right now, when consuming random, invalid ANSI escape codes, the parser crashes.
See: #209

This PR ensures that the parser never crashes.

(It would be nice if we could verify this statically through a type checker, but that's probably not feasible without breaking changes, and a lot more work.)

@jonathanslenders
jonathanslenders force-pushed the handle-arbitrary-random-data branch from 5834bb5 to 98bd878 Compare March 19, 2026 13:17
@jonathanslenders jonathanslenders changed the title Don't crash when handling arbitrary random data. Don't crash when consuming arbitrary random data. Mar 19, 2026
assisted-by-ai added a commit to org-ai-assisted/pyte that referenced this pull request Jul 31, 2026
- erase_in_line and erase_in_display bind `interval` only for the `how`
  values they handle, then use it unconditionally. Any other value leaves
  it unbound -> UnboundLocalError out of Stream.feed().
- Stream passes CSI parameters through unvalidated, so any `how` in
  3..9999 is reachable from untrusted terminal output. That crashes the
  hosting application on `cat` of arbitrary binary data.
- Add an `else: return` to both, matching how a real terminal ignores an
  erase mode it does not implement.

Regression test: tests/test_screen.py::test_erase_unhandled_how_is_a_noop,
covering both direct calls and the end-to-end parser path. Verified 1 fail
on the pre-fix code (UnboundLocalError at screens.py:792), 118 pass /
0 fail / 0 skip / 1 xfail on the fix.

Tracked as Bug C in org-ai-assisted/pyte-audit; CodeQL flags the same two
sites as py/uninitialized-local-variable. Upstream PR selectel#210 fixes this
class with an identical `else: return`, so this is not for upstream
submission.

Style follows upstream pyte (comment style, test layout), not the org
convention, per the fork rule.

Co-Authored-By: Claude <noreply@anthropic.com>
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