fix: prevent client from bypassing random spawn selection π‘οΈ#4428
Conversation
|
No actionable comments were generated in the recent review. π βΉοΈ Recent review infoβοΈ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Run ID: π Files selected for processing (2)
Walkthrough
ChangesRandom Spawn Fix
Estimated code review effortπ― 1 (Trivial) | β±οΈ ~3 minutes Poem
π₯ Pre-merge checks | β 5β Passed checks (5 passed)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
## Description: When random spawn mode is active, players are supposed to receive randomly chosen spawns rather than choosing their own. However, `SpawnExecution.getSpawn()` checks `center !== undefined` first, which means if a player manually injects coordinates into the spawn intent (bypassing the client-side UI guard), the random selection logic is completely bypassed and the player gets their chosen coordinates. This was fully exploitable in singleplayer (where no pre-created `SpawnExecution` objects exist) and was a defense-in-depth gap in multiplayer (relying on execution order of pre-created spawns to block it via the `hasSpawned()` guard). The fix forces `center` to `undefined` in `getSpawn()` when random spawns are enabled, ensuring the random selection code path is always taken regardless of what the client sends. ## Changes: - `src/core/execution/SpawnExecution.ts`: Pass `undefined` to `getSpawn()` when `isRandomSpawn()` is true, ignoring any client-specified tile - `tests/core/execution/SpawnExecution.test.ts`: Added test verifying that a client-specified tile is ignored when random spawn is enabled ## Please complete the following: - [X] I have added screenshots for all UI updates - [X] I process any text displayed to the user through translateText() and I've added it to the en.json file - [X] I have added relevant tests to the test directory ## Please put your Discord username so you can be contacted if a bug or regression is found: FloPinguin
Description:
When random spawn mode is active, players are supposed to receive randomly chosen spawns rather than choosing their own. However,
SpawnExecution.getSpawn()checkscenter !== undefinedfirst, which means if a player manually injects coordinates into the spawn intent (bypassing the client-side UI guard), the random selection logic is completely bypassed and the player gets their chosen coordinates.This was fully exploitable in singleplayer (where no pre-created
SpawnExecutionobjects exist) and was a defense-in-depth gap in multiplayer (relying on execution order of pre-created spawns to block it via thehasSpawned()guard).The fix forces
centertoundefinedingetSpawn()when random spawns are enabled, ensuring the random selection code path is always taken regardless of what the client sends.Changes:
src/core/execution/SpawnExecution.ts: PassundefinedtogetSpawn()whenisRandomSpawn()is true, ignoring any client-specified tiletests/core/execution/SpawnExecution.test.ts: Added test verifying that a client-specified tile is ignored when random spawn is enabledPlease complete the following:
Please put your Discord username so you can be contacted if a bug or regression is found:
FloPinguin