element-hq / element-hq/synapse

500 error on invalid avatar URL

Open
#15,903 0 comments 0 reactions 0 assignees View on GitHub
A-Validation O-Uncommon S-Minor T-Defect
Dominant language
Python
Stars
4.6k
Forks
600
Avg merge
5d 22h
Merged PRs (30d)
51

Description

This issue has been migrated from [#15903](https://github.com/matrix-org/synapse/issues/15903).

---

### Description

Setting an invalid mxc URL as avatar returns a `{"errcode":"M_UNKNOWN","error":"Internal server error"}` instead of some nice error.

This should probably be handled nicely according to spec.
Or it should be possible to set different avatar urls that do not start with `mxc://`

### Steps to reproduce

- type `/myroomavatar example.com` or similar
- press enter

Get `MatrixError: [500] Internal server error (https://my.server/_matrix/client/r0/rooms/!JzIUzeKaqhabcsHQVE%3Amy.server/state/m.room.member/%40test%3Amy.server)`

### Homeserver

self hosted

### Synapse Version

{"server_version":"1.87.0","python_version":"3.11.4"}

### Installation Method

Docker (matrixdotorg/synapse)

### Database

postgres (PostgreSQL) 15.0 (Ubuntu 15.0-1.pgdg22.04+1)

### Workers

Multiple workers

### Platform

lxc container -> docker compose

### Configuration

_No response_

### Relevant log output

```shell
2023-07-10 06:21:43,528 - synapse.http.server - 133 - ERROR - PUT-13 - Failed handle request via 'RoomStateEventRestServlet':
Traceback (most recent call last):
File "/usr/local/lib/python3.11/site-packages/synapse/util/caches/descriptors.py", line 245, in _wrapped
ret = cache.get(cache_key, callback=invalidate_callback)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/synapse/util/caches/deferred_cache.py", line 180, in get
raise KeyError()
KeyError

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/usr/local/lib/python3.11/site-packages/synapse/http/server.py", line 319, in _async_render_wrapper
callback_return = await self._async_render(request)
File "/usr/local/lib/python3.11/site-packages/synapse/http/server.py", line 529, in _async_render
callback_return = await raw_callback_return
File "/usr/local/lib/python3.11/site-packages/synapse/rest/client/room.py", line 289, in on_PUT
event_id, _ = await self.room_member_handler.update_membership(
File "/usr/local/lib/python3.11/site-packages/synapse/handlers/room_member.py", line 642, in update_membership
result = await self.update_membership_locked(
File "/usr/local/lib/python3.11/site-packages/synapse/handlers/room_member.py", line 762, in update_membership_locked
if not await self.profile_handler.check_avatar_size_and_mime_type(
File "/usr/local/lib/python3.11/site-packages/twisted/internet/defer.py", line 1697, in _inlineCallbacks
result = context.run(gen.send, result)
File "/usr/local/lib/python3.11/site-packages/synapse/handlers/profile.py", line 302, in check_avatar_size_and_mime_type
host, port, media_id = parse_and_validate_mxc_uri(mxc)
File "/usr/local/lib/python3.11/site-packages/synapse/util/stringutils.py", line 188, in parse_and_validate_mxc_uri
raise ValueError("mxc URI %r did not match expected format" % (mxc,))
ValueError: mxc URI 'example.com' did not match expected format
```
```

### Anything else that would be useful to know?

_No response_

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.