mirror of
https://mau.dev/maunium/synapse.git
synced 2024-12-13 21:33:20 +01:00
Allow backslashes in event field filters
Fixes a bug introduced in https://github.com/matrix-org/synapse/pull/1783 which meant that single backslashes were not allowed in event field filters. The intention here is to allow single-backslashes, but disallow double-backslashes.
This commit is contained in:
parent
e0b9d5f0af
commit
7e07d25ed6
3 changed files with 16 additions and 2 deletions
1
changelog.d/4083.bugfix
Normal file
1
changelog.d/4083.bugfix
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Fix bug which prevented backslashes being used in event field filters
|
|
@ -172,7 +172,10 @@ USER_FILTER_SCHEMA = {
|
||||||
# events a lot easier as we can then use a negative lookbehind
|
# events a lot easier as we can then use a negative lookbehind
|
||||||
# assertion to split '\.' If we allowed \\ then it would
|
# assertion to split '\.' If we allowed \\ then it would
|
||||||
# incorrectly split '\\.' See synapse.events.utils.serialize_event
|
# incorrectly split '\\.' See synapse.events.utils.serialize_event
|
||||||
"pattern": "^((?!\\\).)*$"
|
#
|
||||||
|
# Note that because this is a regular expression, we have to escape
|
||||||
|
# each backslash in the pattern.
|
||||||
|
"pattern": r"^((?!\\\\).)*$"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
|
@ -60,7 +60,7 @@ class FilteringTestCase(unittest.TestCase):
|
||||||
invalid_filters = [
|
invalid_filters = [
|
||||||
{"boom": {}},
|
{"boom": {}},
|
||||||
{"account_data": "Hello World"},
|
{"account_data": "Hello World"},
|
||||||
{"event_fields": ["\\foo"]},
|
{"event_fields": [r"\\foo"]},
|
||||||
{"room": {"timeline": {"limit": 0}, "state": {"not_bars": ["*"]}}},
|
{"room": {"timeline": {"limit": 0}, "state": {"not_bars": ["*"]}}},
|
||||||
{"event_format": "other"},
|
{"event_format": "other"},
|
||||||
{"room": {"not_rooms": ["#foo:pik-test"]}},
|
{"room": {"not_rooms": ["#foo:pik-test"]}},
|
||||||
|
@ -109,6 +109,16 @@ class FilteringTestCase(unittest.TestCase):
|
||||||
"event_format": "client",
|
"event_format": "client",
|
||||||
"event_fields": ["type", "content", "sender"],
|
"event_fields": ["type", "content", "sender"],
|
||||||
},
|
},
|
||||||
|
|
||||||
|
# a single backslash should be permitted (though it is debatable whether
|
||||||
|
# it should be permitted before anything other than `.`, and what that
|
||||||
|
# actually means)
|
||||||
|
#
|
||||||
|
# (note that event_fields is implemented in
|
||||||
|
# synapse.events.utils.serialize_event, and so whether this actually works
|
||||||
|
# is tested elsewhere. We just want to check that it is allowed through the
|
||||||
|
# filter validation)
|
||||||
|
{"event_fields": [r"foo\.bar"]},
|
||||||
]
|
]
|
||||||
for filter in valid_filters:
|
for filter in valid_filters:
|
||||||
try:
|
try:
|
||||||
|
|
Loading…
Reference in a new issue