diff options
| author | Gabriel Schneider <[email protected]> | 2026-09-29 03:40:22 -0300 |
|---|---|---|
| committer | Gabriel Schneider <[email protected]> | 2026-10-01 00:12:15 -0300 |
| commit | d5e0ce3c7e23e1931fc6e17c4d95b9105f97bddf (patch) | |
| tree | 248b23918aefb2c8387a6f6362c1c7540c47d7db /src/ninep/events.zig | |
| parent | 84d23aef86c0bcb6ee14bb69b1e4d6d65205e2f6 (diff) | |
| download | pardes-d5e0ce3c7e23e1931fc6e17c4d95b9105f97bddf.tar.gz pardes-d5e0ce3c7e23e1931fc6e17c4d95b9105f97bddf.zip | |
An event write-back past the text says range past end of body
A well-formed record whose range ran past the body (or tag) was refused
as "bad event syntax", which sent a client looking for a typo. It now
says "range past end of body" (or tag); a malformed one keeps the old
words.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Diffstat (limited to 'src/ninep/events.zig')
| -rw-r--r-- | src/ninep/events.zig | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/src/ninep/events.zig b/src/ninep/events.zig index e0e66800..a12cf86d 100644 --- a/src/ninep/events.zig +++ b/src/ninep/events.zig @@ -579,7 +579,9 @@ pub fn writeEvent(p: *Pardes, req: Req, id: usize) Reply { else => return tree.failText(req.tag, E.INVAL, tree.e_bad_event), } const n = if (r.action.onTag()) tag.len else body.len; - if (r.q0 > r.q1 or r.q1 > n) return tree.failText(req.tag, E.INVAL, tree.e_bad_event); + if (r.q0 > r.q1) return tree.failText(req.tag, E.INVAL, tree.e_bad_event); + // Well formed, but not a range of this text: say which. + if (r.q1 > n) return tree.failText(req.tag, E.INVAL, if (r.action.onTag()) "range past end of tag" else "range past end of body"); } if (check.i != req.data.len) return tree.failText(req.tag, E.INVAL, tree.e_bad_event); } @@ -816,6 +818,8 @@ test "writing an event record back performs the action it names" { try testing.expectEqual(E.INVAL, wr(p, event, bad).errno()); try testing.expectEqual(@as(usize, 0), pane.msg_len); } + // Well formed but past the text: said so, not "bad event syntax". + try testing.expectEqualStrings("range past end of body", wr(p, event, "MX0 999\n").reply.ename); _ = call(p, .{ .tag = 23, .op = .open, .node = event }); p.fs.origin = 'K'; |
