Skip to content
This repository was archived by the owner on Apr 26, 2024. It is now read-only.

Commit d16c637

Browse files
committed
Limit displaynames and avatar URLs
These end up in join events everywhere, so let's limit them. Fixes #5079
1 parent e26e6b3 commit d16c637

File tree

3 files changed

+16
-0
lines changed

3 files changed

+16
-0
lines changed

changelog.d/5309.bugfix

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Prevent users from setting huge displaynames and avatar URLs.

synapse/handlers/profile.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,9 @@
3131

3232
logger = logging.getLogger(__name__)
3333

34+
MAX_DISPLAYNAME_LEN = 100
35+
MAX_AVATAR_URL_LEN = 1000
36+
3437

3538
class BaseProfileHandler(BaseHandler):
3639
"""Handles fetching and updating user profile information.
@@ -162,6 +165,11 @@ def set_displayname(self, target_user, requester, new_displayname, by_admin=Fals
162165
if not by_admin and target_user != requester.user:
163166
raise AuthError(400, "Cannot set another user's displayname")
164167

168+
if len(new_displayname) > MAX_DISPLAYNAME_LEN:
169+
raise SynapseError(
170+
400, "Displayname is too long (max %i)" % (MAX_DISPLAYNAME_LEN, ),
171+
)
172+
165173
if new_displayname == '':
166174
new_displayname = None
167175

@@ -217,6 +225,11 @@ def set_avatar_url(self, target_user, requester, new_avatar_url, by_admin=False)
217225
if not by_admin and target_user != requester.user:
218226
raise AuthError(400, "Cannot set another user's avatar_url")
219227

228+
if len(new_avatar_url) > MAX_AVATAR_URL_LEN:
229+
raise SynapseError(
230+
400, "Avatar URL is too long (max %i)" % (MAX_AVATAR_URL_LEN, ),
231+
)
232+
220233
yield self.store.set_profile_avatar_url(
221234
target_user.localpart, new_avatar_url
222235
)

synapse/handlers/register.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -531,6 +531,8 @@ def get_or_create_user(self, requester, localpart, displayname,
531531
A tuple of (user_id, access_token).
532532
Raises:
533533
RegistrationError if there was a problem registering.
534+
535+
NB this is only used in tests. TODO: move it to the test package!
534536
"""
535537
if localpart is None:
536538
raise SynapseError(400, "Request must include user id")

0 commit comments

Comments
 (0)