summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGabriel Schneider <[email protected]>2026-09-29 03:40:22 -0300
committerGabriel Schneider <[email protected]>2026-10-01 00:12:15 -0300
commitd5e0ce3c7e23e1931fc6e17c4d95b9105f97bddf (patch)
tree248b23918aefb2c8387a6f6362c1c7540c47d7db
parent84d23aef86c0bcb6ee14bb69b1e4d6d65205e2f6 (diff)
downloadpardes-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]>
-rw-r--r--src/ninep/events.zig6
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';