diff --git a/changelog.d/3405.bugfix b/changelog.d/3405.bugfix new file mode 100644 index 000000000..27f5226b3 --- /dev/null +++ b/changelog.d/3405.bugfix @@ -0,0 +1 @@ +Fix contains_url check to be consistent with other instances in code-base and check that value is an instance of string. diff --git a/synapse/api/filtering.py b/synapse/api/filtering.py index 677c0bdd4..16ad65486 100644 --- a/synapse/api/filtering.py +++ b/synapse/api/filtering.py @@ -12,6 +12,8 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. +from six import text_type + import jsonschema from canonicaljson import json from jsonschema import FormatChecker @@ -353,7 +355,7 @@ class Filter(object): sender = event.user_id room_id = None ev_type = "m.presence" - is_url = False + contains_url = False else: sender = event.get("sender", None) if not sender: @@ -368,13 +370,16 @@ class Filter(object): room_id = event.get("room_id", None) ev_type = event.get("type", None) - is_url = "url" in event.get("content", {}) + + content = event.get("content", {}) + # check if there is a string url field in the content for filtering purposes + contains_url = isinstance(content.get("url"), text_type) return self.check_fields( room_id, sender, ev_type, - is_url, + contains_url, ) def check_fields(self, room_id, sender, event_type, contains_url):