diff --git a/lib/src/services/api/client2client/additional_data.c2c.dart b/lib/src/services/api/client2client/additional_data.c2c.dart index 02ffb246..5a451bb4 100644 --- a/lib/src/services/api/client2client/additional_data.c2c.dart +++ b/lib/src/services/api/client2client/additional_data.c2c.dart @@ -14,6 +14,19 @@ Future handleAdditionalDataMessage( Log.info( 'Got a additional data message: ${message.senderMessageId} from $groupId', ); + + // Prevent message overwrite: reject if a message with this ID already + // exists from a different sender. + final existing = await twonlyDB.messagesDao + .getMessageById(message.senderMessageId) + .getSingleOrNull(); + if (existing != null && existing.senderId != fromUserId) { + Log.warn( + '$fromUserId tried to overwrite message from ${existing.senderId}. Dropping.', + ); + return; + } + final msg = await twonlyDB.messagesDao.insertMessage( MessagesCompanion( messageId: Value(message.senderMessageId), diff --git a/lib/src/services/api/client2client/text_message.c2c.dart b/lib/src/services/api/client2client/text_message.c2c.dart index 31d225b4..b46e72f2 100644 --- a/lib/src/services/api/client2client/text_message.c2c.dart +++ b/lib/src/services/api/client2client/text_message.c2c.dart @@ -16,6 +16,18 @@ Future handleTextMessage( 'Got a text message: ${textMessage.senderMessageId} from $groupId', ); + // Prevent message overwrite: reject if a message with this ID already + // exists from a different sender. + final existing = await twonlyDB.messagesDao + .getMessageById(textMessage.senderMessageId) + .getSingleOrNull(); + if (existing != null && existing.senderId != fromUserId) { + Log.warn( + '$fromUserId tried to overwrite message from ${existing.senderId}. Dropping.', + ); + return; + } + final message = await twonlyDB.messagesDao.insertMessage( MessagesCompanion( messageId: Value(textMessage.senderMessageId),