From 1b991d318f551c8bd4571976f24d1f701fe8d07a Mon Sep 17 00:00:00 2001 From: DarkRRb <177549718+DarkRRb@users.noreply.github.com> Date: Thu, 22 May 2025 10:13:25 +0800 Subject: [PATCH 1/2] [Core] Fix #841 --- Lagrange.OneBot/Database/MessageRecord.cs | 43 ++++++++++++++--------- 1 file changed, 26 insertions(+), 17 deletions(-) diff --git a/Lagrange.OneBot/Database/MessageRecord.cs b/Lagrange.OneBot/Database/MessageRecord.cs index ab1632419..7c9e36b98 100644 --- a/Lagrange.OneBot/Database/MessageRecord.cs +++ b/Lagrange.OneBot/Database/MessageRecord.cs @@ -72,25 +72,34 @@ public static int CalcMessageHash(ulong msgId, uint seq) return ((ushort)seq << 16) | (ushort)msgId; } - public static implicit operator MessageRecord(MessageChain chain) => new() + public static implicit operator MessageRecord(MessageChain chain) { - Id = CalcMessageHash(chain.MessageId, chain.Sequence), - Type = chain.Type, - Sequence = chain.Sequence, - ClientSequence = chain.ClientSequence, - MessageId = chain.MessageId, - Time = chain.Time, - FromUin = chain.FriendUin, - ToUin = chain.Type switch + // The `static byte[] Serialize(T, MessagePackSerializerOptions?, CancellationToken)` method + // may have resource reuse issues that could lead to incorrect serialization results. + // Use a separate stream to resolve this problem. + using MemoryStream stream = new MemoryStream(); + MessagePackSerializer.Serialize>(stream, chain, OPTIONS); + + return new() { - MessageType.Group => (ulong)chain.GroupUin!, - MessageType.Temp or - MessageType.Friend => chain.TargetUin, - _ => throw new NotImplementedException(), - }, - Style = chain.Style != null ? (MessageStyleRecord)chain.Style : null, - Entities = MessagePackSerializer.Serialize>(chain, OPTIONS) - }; + Id = CalcMessageHash(chain.MessageId, chain.Sequence), + Type = chain.Type, + Sequence = chain.Sequence, + ClientSequence = chain.ClientSequence, + MessageId = chain.MessageId, + Time = chain.Time, + FromUin = chain.FriendUin, + ToUin = chain.Type switch + { + MessageType.Group => (ulong)chain.GroupUin!, + MessageType.Temp or + MessageType.Friend => chain.TargetUin, + _ => throw new NotImplementedException(), + }, + Style = chain.Style != null ? (MessageStyleRecord)chain.Style : null, + Entities = stream.ToArray(), + }; + } public static implicit operator MessageChain(MessageRecord record) { From e8dc3996f65bd82aebe8e0337bc76a217eca31d1 Mon Sep 17 00:00:00 2001 From: DarkRRb <177549718+DarkRRb@users.noreply.github.com> Date: Thu, 22 May 2025 10:31:21 +0800 Subject: [PATCH 2/2] Shut up NotImplementedException --- Lagrange.OneBot/Database/MessageRecord.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Lagrange.OneBot/Database/MessageRecord.cs b/Lagrange.OneBot/Database/MessageRecord.cs index 7c9e36b98..e40333c46 100644 --- a/Lagrange.OneBot/Database/MessageRecord.cs +++ b/Lagrange.OneBot/Database/MessageRecord.cs @@ -94,7 +94,7 @@ public static implicit operator MessageRecord(MessageChain chain) MessageType.Group => (ulong)chain.GroupUin!, MessageType.Temp or MessageType.Friend => chain.TargetUin, - _ => throw new NotImplementedException(), + _ => throw new NotSupportedException(), }, Style = chain.Style != null ? (MessageStyleRecord)chain.Style : null, Entities = stream.ToArray(), @@ -121,7 +121,7 @@ MessageType.Temp or (uint)record.ClientSequence, record.MessageId ), - _ => throw new NotImplementedException(), + _ => throw new NotSupportedException(), }; var entities = MessagePackSerializer.Deserialize>(record.Entities, OPTIONS);