Skip to content

Commit 39eea66

Browse files
Brutus5000claude
andcommitted
Reject INCREMENT/SET_STEPS_AT_LEAST without steps
Without this, a malformed payload would NPE on auto-unboxing inside the switch and produce a confusing stack trace. Throwing explicitly points straight at the contract violation. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent 9b72400 commit 39eea66

1 file changed

Lines changed: 9 additions & 2 deletions

File tree

src/main/java/com/faforever/api/achievements/AchievementsController.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,16 @@ public void update(AchievementUpdateRequest request) {
2121
switch (request.operation()) {
2222
case REVEAL -> throw new UnsupportedOperationException("REVEAL is not yet implemented");
2323
case UNLOCK -> achievementService.unlock(request.playerId(), request.achievementId());
24-
case INCREMENT -> achievementService.increment(request.playerId(), request.achievementId(), request.steps());
24+
case INCREMENT -> achievementService.increment(request.playerId(), request.achievementId(), requireSteps(request));
2525
case SET_STEPS_AT_LEAST ->
26-
achievementService.setStepsAtLeast(request.playerId(), request.achievementId(), request.steps());
26+
achievementService.setStepsAtLeast(request.playerId(), request.achievementId(), requireSteps(request));
2727
}
2828
}
29+
30+
private static int requireSteps(AchievementUpdateRequest request) {
31+
if (request.steps() == null) {
32+
throw new IllegalArgumentException("steps is required for operation " + request.operation());
33+
}
34+
return request.steps();
35+
}
2936
}

0 commit comments

Comments
 (0)