diff --git a/src/GameCult.Networking/CultNetSchemaMessageSerialization.cs b/src/GameCult.Networking/CultNetSchemaMessageSerialization.cs
index 3069384a..cb33b707 100644
--- a/src/GameCult.Networking/CultNetSchemaMessageSerialization.cs
+++ b/src/GameCult.Networking/CultNetSchemaMessageSerialization.cs
@@ -111,7 +111,7 @@ namespace GameCult.Networking
{
private static readonly System.Text.UTF8Encoding StrictUtf8 = new(false, true);
- /// Throws unless the frame's top-level messageId is a valid write_admitted id; other keys are left to the serializer.
+ /// Throws unless every top-level messageId key of the frame is a valid write_admitted id; other keys are left to the serializer.
public static void Require(byte[] payload)
{
var reader = new MessagePackReader(payload);
@@ -125,7 +125,7 @@ namespace GameCult.Networking
try { id = StrictUtf8.GetString(reader.ReadStringSequence()!.Value.ToArray()); }
catch (System.Text.DecoderFallbackException) { throw new MessagePackSerializationException("cultnet.write_admitted.v0 messageId is not valid UTF-8."); }
if (!IsValid(id)) throw new MessagePackSerializationException("cultnet.write_admitted.v0 messageId must contain a letter or number and no Default_Ignorable code point.");
- return;
+ continue; // a repeated messageId key is checked too: the serializer keeps the last, so every one must be valid
}
if (key == null) reader.Skip();