fix(network): one malformed signaling frame crashes the UDP game server
Maintainer antworten meist innerhalb von 1 Tag
Dieses Issue hat noch niemand übernommen.
Bewertung
- Schwierigkeit
- 2/5
- Geschätzter Aufwand
- 1-3 Stunden
- Anfängerfreundlichkeit
- 76/100
- Issue-Typ
- Bug
- Klarheit
- Klar beschrieben
- Aktivitätsstatus
- Aktiv
- Tech-Stack
- bun, typescript
- Bereich
- networking, security
Rechercherichtung
Beginne in modules/network/src/server/udp.server.network.ts ungefähr bei den Zeilen 158–176 und lies shared/signaling.ts wegen des vorhandenen Hilfsprogramms parseSignal. Sieh dir dann die Signalisierungstests in test/server/udp.server.spec.ts an und füge neben dem Erfolgsfall einen Fall mit einem fehlerhaften Frame hinzu. Fertig ist die Aufgabe, wenn ungültige Frames den Server nicht mehr zum Absturz bringen und der Test bestätigt, dass der Socket mit Code 1008 geschlossen wird.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
Which package is this bug report for?
network
Issue description
The async message handler of the UDP signaling WebSocket calls JSON.parse on raw input and then awaits setRemoteDescription / addIceCandidate with unvalidated data, with no try/catch. Neither the engine nor the loader installs an unhandled-rejection handler, so the rejection is unhandled and the Bun process exits. Any client that connects over TCP gets the session token this socket needs, so any player can stop the game server with a single frame. A null payload also throws on data.type, and pendingCandidates grows without limit.
Where:
Evidence:
message: async (webSocket, message) => {
...
const data = JSON.parse(typeof message === "string" ? message : new TextDecoder().decode(message));
if (data.type === "offer") { await this.receiveClientOffer(peerConnection, data.offer, webSocket); }
Reproduced with the same handler shape on Bun 1.3.14: ws.send("{") → SyntaxError: JSON Parse error: Expected '}' → process exits with code 1.
Suggested fix: Parse with the existing parseSignal (shared/signaling.ts), check the types of type / offer / candidate, wrap the body in try/catch and close the socket with 1008 on failure. Add a malformed-frame test next to the "signaling" happy path in test/server/udp.server.spec.ts.
Found during a code audit of main at be72076.
Code sample
// Same handler shape as UDPServer's signaling socket
const server = Bun.serve({
port: 0,
fetch: (req, srv) => (srv.upgrade(req) ? undefined : new Response("no")),
websocket: { message: async (_ws, m) => { const d = JSON.parse(String(m)); console.log(d.type); } },
});
const ws = new WebSocket(`ws://localhost:${server.port}`);
ws.onopen = () => ws.send("{");
// → SyntaxError: JSON Parse error, process exits with code 1
Versions
- Engine
mainat be72076 - pnpm 12.0.0, Node.js 26, Bun 1.3.14
Issue priority
High (immediate attention needed)
I have tested this issue on a development release
be72076
- Vorherrschende Sprache
- TypeScript
- Sterne
- 7
- Forks
- 2
- Ø Merge
- 1 T. 17 Std.
- Gemergte PRs (30 T.)
- 17
Entwicklungsumgebung
- Kein Dockerfile und keine Docker-Compose-Datei
- Hat eine Pull-Request-Vorlage
- Beitragsleitfaden lesen
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus NanoForge-dev/Engine
-
dependencies enhancement good first issue
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
NanoForge-dev/Engine#513 ·
Maintainer antworten meist innerhalb von 1 Tag
-
bug chore tests
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 77/100
NanoForge-dev/Engine#511 ·
Maintainer antworten meist innerhalb von 1 Tag
-
docs(network): TSDoc says ICE_SERVERS defaults to an empty list, the code uses public STUN serversOffendocumentation good first issue modules:network
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 88/100
NanoForge-dev/Engine#509 ·
Maintainer antworten meist innerhalb von 1 Tag
-
documentation modules:ecs packages:asset packages:core
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 82/100
NanoForge-dev/Engine#508 ·
Maintainer antworten meist innerhalb von 1 Tag
-
bug good first issue modules:music modules:sound
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
NanoForge-dev/Engine#505 ·
Maintainer antworten meist innerhalb von 1 Tag
Alle Issues in NanoForge-dev/Engine
Ähnliche Issues
-
Mend: dependency security vulnerability
Schwierigkeit 1/5 1-3 Stunden Anfängerfreundlichkeit 65/100
fdm-monster/fdm-monster#5563 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
be-BOP-io-SA/be-BOP#2849 ·
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 79/100
Maintainer antworten meist innerhalb von 1 Tag
-
1️⃣ phase/under-investigation flaky/confirmed flaky/needs-decision type/bug
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 65/100
growilabs/growi#12246 · 3 Kommentare ·
Maintainer antworten meist innerhalb von 1 Tag
-
🐛 The Rulekeeper - An index run that gives up on the lock ends SucceededEvtl. vergeben @github-actions hat das heute übernommen. Offen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
SSWConsulting/SSW.Rules#2809 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag