#13360·synapse

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:

  1. Leaving a room that doesn't exist on the host returns "M_UNKNOWN" (Not a known room)
  2. 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.
  3. 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 /leave a 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

bash
Ditto

Anything else that would be useful to know?

No response