mirror of
https://github.com/storytold/lightcraft.git
synced 2026-10-14 19:27:01 -04:00
Issue #94: Control: close the connection on malformed input
A line that is not a JSON object with a string `method` (HTTP request line, invalid UTF-8, non-object JSON, >4 MiB line) now gets one error reply and the connection is closed, so a browser's cross-origin fetch can't smuggle a command in its body. Connections are capped at 16. Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
1 parent
572b55a44a
commit
cddcb905e0
3 files changed
+250
-33
No files matched your search
@@ -9,7 +9,16 @@
|
||||
← {"id": 2, "ok": false, "error": "unknown command `nope`"}
|
||||
```
|
||||
|
||||
Requests are answered on the UI thread between frames (timeout 60 s). The MCP server's connect
|
||||
Requests are answered on the UI thread between frames (timeout 60 s).
|
||||
|
||||
**Only requests are read.** Every line must be a JSON object with a string `method` (`id` and `params` are
|
||||
optional; blank lines are skipped). Anything else — text that isn't JSON, a JSON array or number, an object without
|
||||
`method`, invalid UTF-8, or a line longer than 4 MiB — gets one error reply
|
||||
(`{"ok": false, "error": "… closing the connection"}`) and the server **closes the connection**; nothing sent after
|
||||
it on that connection runs. This keeps an HTTP request (for example a web page's cross-origin `fetch` to
|
||||
`127.0.0.1:<port>`) from smuggling a command in its body: its request line is rejected first. Junk never reaches the
|
||||
UI thread, and at most 16 connections are served at once (further ones get an error line and are closed). Clients
|
||||
that hit an error reply should reconnect. The port has no authentication, so only enable it when you need it. The MCP server's connect
|
||||
mode ([mcp.md](mcp.md)) is a thin layer over this channel. Implementation:
|
||||
`crates/ui-egui/src/control.rs` (methods) and `apps/lightcraft/src/control_server.rs` (transport).
|
||||
|
||||
|
||||
Reference in new issue
Block a user