"allow": "🐟" breaks the join rules in dendrite, and presumably this is caused by GMSL.
Take for example
{"allow": "🐟", "join_rule": "knock"}
this m.room.join_rules event content.
From what I can gather, rather than ignoring the invalid allow field, GMSL is failing to unmarshal the event at all, causing the JoinRuleEventContent.JoinRule to be "", or an empty string, which is not allowed by spec, causing valid joins to fail.
The solution to this is to ignore the invalid allow value (unless the join_rule is restricted or knock_restricted, otherwise the event must always fail joins without an invite per the spec), however I dug into the code briefly myself and got a bit lost. It's entirely possible that it's not an unmarshal error that's being discarded but in fact just the join rule itself being entirely discarded and consequently not set, leading to the default for string being used.
"allow": "🐟"breaks the join rules in dendrite, and presumably this is caused by GMSL.Take for example
{"allow": "🐟", "join_rule": "knock"}this m.room.join_rules event content.
From what I can gather, rather than ignoring the invalid
allowfield, GMSL is failing to unmarshal the event at all, causing theJoinRuleEventContent.JoinRuleto be"", or an empty string, which is not allowed by spec, causing valid joins to fail.The solution to this is to ignore the invalid
allowvalue (unless thejoin_ruleisrestrictedorknock_restricted, otherwise the event must always fail joins without an invite per the spec), however I dug into the code briefly myself and got a bit lost. It's entirely possible that it's not an unmarshal error that's being discarded but in fact just the join rule itself being entirely discarded and consequently not set, leading to the default forstringbeing used.