From cf49c329cb401a5c530ef2533066702fe1545360 Mon Sep 17 00:00:00 2001 From: Gabriel Schneider Date: Tue, 29 Sep 2026 03:10:29 -0300 Subject: An exec line over 1024 bytes fails the write, naming the limit A command line longer than the 1024 bytes a command pane takes was said on the message row after the write had already succeeded. An exec write (the root's, a pane's, tagexec, a column's) now refuses it before anything runs, EINVAL with "a command line is at most 1024 bytes" and an err record; a builtin's line, a long Msg or an Edit block, is not limited. Co-Authored-By: Claude Opus 5.5 --- src/ninep/cols.zig | 1 + 1 file changed, 1 insertion(+) (limited to 'src/ninep/cols.zig') diff --git a/src/ninep/cols.zig b/src/ninep/cols.zig index 8a3474b3..ad7d30f8 100644 --- a/src/ninep/cols.zig +++ b/src/ninep/cols.zig @@ -158,6 +158,7 @@ pub fn writeExec(p: *Pardes, req: Req, serial: ?u32) Reply { const line = std.mem.trim(u8, raw, " \t\r"); if (line.len == 0) continue; for (line) |c| if (c < ' ' and c != '\t') return Reply.fail(req.tag, E.INVAL); + if (pardes.ctlfs.ctl.tooLong(req, line)) |refusal| return refusal; const col = if (serial) |s| layout.columnBySerial(p, s) orelse return Reply.fail(req.tag, E.NOENT) else null; if (p.panes[p.active] == null) return Reply.fail(req.tag, E.NOENT); p.exec_column = col; -- cgit v1.3