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

umputun / agterm / 30730476326
98%

Build:
DEFAULT BRANCH: master
Ran 02 Aug 2026 03:24AM UTC
Jobs 1
Files 85
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

02 Aug 2026 03:21AM UTC coverage: 97.702% (+0.005%) from 97.697%
30730476326

push

github

web-flow
fix(agtermctl): survive oversized requests instead of dying on SIGPIPE (#340)

* fix(agtermctl): survive oversized requests instead of dying on SIGPIPE

A request over the server's 1 MiB line cap made the server close the
connection mid-write; the client fd had no SO_NOSIGPIPE (the server side
sets it, with a comment naming this exact hazard), so agtermctl died on
signal 13 — exit 141, zero output. Reachable from ordinary use:
session type --stdin with a large file, a big pick list, a long
session restore.

Two changes, both needed: SO_NOSIGPIPE alone still loses the server's
"request too large" message, because writeAll throws on EPIPE before
readLine ever runs.

- set SO_NOSIGPIPE on the client fd after socket(), mirroring the server
  (Darwin-only, keeping the Glibc test build compiling)
- check the encoded request against the cap before connecting, so an
  oversized request fails with a readable error naming the size and cap;
  the newline is appended after the check, matching the server's
  newline-excluded count
- hoist the cap into agtermCore (ControlWire.maxRequestLineBytes) and
  point ControlServer at it, so the two sides can't drift

Tests: an oversized request throws before connecting; a hang-up stub
server proves a mid-write peer close surfaces as a thrown write error
rather than killing the process (removing the setsockopt makes the
runner die on signal 13, so the test has teeth).

* docs: single ControlWire doc carrying the sizing rationale; drop the contradicted Glibc clause

Review feedback on #340: the Darwin-guard comment claimed the Glibc build
never writes to a dead peer, which writeToHungUpPeerThrowsInsteadOfDying
in the same commit does; and the enum/member docs restated one contract
while losing the old cap-sizing rationale. One doc on ControlWire now
carries sizing + newline exclusion, matching OverlayResultError and
ControlNotify.

18 of 18 new or added lines in 1 file covered. (100.0%)

6888 of 7050 relevant lines covered (97.7%)

4264730.29 hits per line

Jobs
ID Job ID Ran Files Coverage
1 30730476326.1 02 Aug 2026 03:24AM UTC 85
97.7
GitHub Action Run
Source Files on build 30730476326
  • Tree
  • List 85
  • Changed 2
  • Source Changed 2
  • Coverage Changed 2
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #30730476326
  • a327539b on github
  • Prev Build on master (#30724758716)
  • Next Build on master (#30734804723)
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