fix(server): skip an unmappable event on replay instead of tearing down the stream
Wrap the per-event mapper.map in runCatching in the replay loop so a single event the mapper can't handle no longer kills the whole WebSocket stream. Defense-in-depth beyond the AnyMapSerializer fix.
This commit is contained in:
@@ -31,9 +31,12 @@ class SessionStreamHandler(private val module: ServerModule) {
|
||||
log.debug("replaying {} event(s) for session={}", replayEvents.size, sessionId.value)
|
||||
|
||||
for (event in replayEvents) {
|
||||
mapper.map(event)?.let { msg ->
|
||||
session.send(Frame.Text(ProtocolSerializer.encodeServerMessage(msg)))
|
||||
}
|
||||
runCatching { mapper.map(event) }
|
||||
.onFailure { log.warn("skipping unmappable event seq={}: {}", event.sequence, it.message) }
|
||||
.getOrNull()
|
||||
?.let { msg ->
|
||||
session.send(Frame.Text(ProtocolSerializer.encodeServerMessage(msg)))
|
||||
}
|
||||
}
|
||||
|
||||
module.approvalCoordinator.registerClient(sessionId, session)
|
||||
|
||||
Reference in New Issue
Block a user