The error responses from /leave do not conform to the spec.
Author: Half-ShotCreated Jul 22, 2022Updated Dec 13, 2023
LabelsA-Spec-ComplianceS-MinorT-DefectA-Leave
Description
The spec (https://spec.matrix.org/v1.3/client-server-api/#post_matrixclientv3roomsroomidleave) only allows two possible responses from a call to /leave. A 200 if the room was left, or 429 if the request was rate limited.
However, Synapse will return different responses depending on your, and your homeservers state in the room:
- Leaving a room that doesn't exist on the host returns "M_UNKNOWN" (Not a known room)
- Leaving a room on the host that I was never in (but the host is still joined to via another user) will result in a M_FORBIDDEN.
- Leaving a room that I was previously in will always no-op with a 200.
The spec is unfortunately doesn't define the behaviour for trying to leave a room when you were never part of it, but my feeling is that it should no-op in a similar fashion to reinviting users, or rejoining a room also no-op.
Steps to reproduce
For case 1:
- Try to
/leavea random roomID that you totally made up. - Observe the error
For case 2:
- Create a room your homeserver
- Try to /leave that room from another user who was never joined to it.
- Observe the error
For case 3:
- Create a room.
- Leave the room.
- Leave the room (and repeat as much as you like)
- Observe a 200 response with an empty body.
Homeserver
half-shot.uk
Synapse Version
1.60.0
Installation Method
pip (from PyPI)
Platform
Probably not relevant
Relevant log output
DittoAnything else that would be useful to know?
No response
Source: matrix-org/synapse