Skip to content

Go 1.26, hostile-input hardening, go-sunspec v0.9.0 (v0.5.0) - #19

Merged
boeboe merged 3 commits into
mainfrom
chore/go-1.26
Nov 5, 2026
Merged

boeboe merged 3 commits into
mainfrom
chore/go-1.26

Conversation

@boeboe

@boeboe boeboe commented Nov 5, 2026

Copy link
Copy Markdown
Contributor

Prepares v0.5.0 (RELEASE.md has the details).

  • Go 1.26 minimum (CI 1.26 and 1.27), go fix, shared workflows v3.3.1; go-sunspec v0.9.0 and go-modbus v1.11.1.
  • SAST low/low was already clean; a hostile-device/input review found 9 defects, all fixed with tests that failed before:
    • device strings and error messages reached the terminal raw (escape sequences could clear the screen, set the title or forge lines); now escaped in text output, JSON unchanged;
    • capture -o/template -o wrote 0644, followed symlinks and truncated before writing; now 0600, temp + rename, links refused (exit 10);
    • serve --file and TLS files read with no size limit (/dev/zero);
    • poll* ignored Ctrl-C during discovery; text write errors exited 0;
    • non-positive --timeout/--interval, negative --count, --unit-id 0 silently misused, now exit 2.
  • Hostile device/input tests, fuzz targets FuzzTermSafe and FuzzTextOutput; coverage 99.4 → 99.5 %.
  • Exit-code changes are listed in RELEASE.md (contract per AGENTS.md).
  • make check and make e2e green locally.

🤖 Generated with Claude Code

boeboe and others added 3 commits November 5, 2026 13:28
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Text output, serve's write log and error messages escape control
  characters, escape sequences, bidi overrides and invalid UTF-8 from
  device data (a device could clear the screen or forge output lines).
- capture/template -o write 0600 via temp file + rename and refuse
  symlinks and non-regular files (exit 10); the old file survives.
- serve --file is capped at 16 MiB and TLS files at 4 MiB (exit 3).
- poll, poll-model and poll-point stop on interrupt during discovery.
- Text write errors exit 10; non-positive --timeout/--interval, negative
  --count and --unit-id 0 are usage errors (exit 2).
- detect docs match the code (exit 1 without the SunS marker).
- Hostile device/input tests and two fuzz targets.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Out-of-range scale factors are no longer applied by go-sunspec; the
hostile test now asserts the unscaled point.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@boeboe
boeboe merged commit b64dd16 into main Nov 5, 2026
20 checks passed
@codecov

codecov Bot commented Nov 5, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

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