From 5320bb6114f3fa848d1ead9d73499021cc3640a5 Mon Sep 17 00:00:00 2001 From: 22314621 Date: Sat, 16 May 2026 20:21:12 +0300 Subject: [PATCH 1/2] fix: catch unhandled promise rejection from async game.end() (SEC-05) game.end() is async but was called without await inside a try/catch. The try/catch only catches synchronous errors. Added .catch() to the returned promise to prevent unhandled promise rejections from crashing the server. --- src/server/GameManager.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/server/GameManager.ts b/src/server/GameManager.ts index 72065a2067..b1095c5d58 100644 --- a/src/server/GameManager.ts +++ b/src/server/GameManager.ts @@ -131,7 +131,9 @@ export class GameManager { if (phase === GamePhase.Finished) { try { - game.end(); + game.end().catch((error: any) => { + this.log.error(`error ending game ${id}: ${error}`); + }); } catch (error) { this.log.error(`error ending game ${id}: ${error}`); } From 933675cdb23c731c371d1b1ab67c0b2e084ca079 Mon Sep 17 00:00:00 2001 From: 22314621 Date: Sun, 17 May 2026 05:59:27 +0300 Subject: [PATCH 2/2] refactor: remove redundant try/catch around fire-and-forget game.end() (SEC-05) --- src/server/GameManager.ts | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/server/GameManager.ts b/src/server/GameManager.ts index b1095c5d58..8749838361 100644 --- a/src/server/GameManager.ts +++ b/src/server/GameManager.ts @@ -130,13 +130,9 @@ export class GameManager { } if (phase === GamePhase.Finished) { - try { - game.end().catch((error: any) => { - this.log.error(`error ending game ${id}: ${error}`); - }); - } catch (error) { + game.end().catch((error: any) => { this.log.error(`error ending game ${id}: ${error}`); - } + }); } else { active.set(id, game); }