element-hq / element-hq/synapse
500 error on invalid avatar URL
- 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
Assessment
This issue has not been assessed yet.