fix crash on membership change with invalid data ()

* fix membership change with  invalid data crash

* add more checks around membership change

* fix displayname condition
This commit is contained in:
Ajay Bura 2025-01-26 22:53:16 +11:00 committed by GitHub
parent d5766b58fe
commit 8e4475bb56
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -18,6 +18,7 @@ export const useMemberEventParser = (): MemberEventParser => {
const prevContent = mEvent.getPrevContent() as IMemberContent;
const senderId = mEvent.getSender();
const userId = mEvent.getStateKey();
const reason = typeof content.reason === 'string' ? content.reason : undefined;
if (!senderId || !userId)
return {
@ -26,7 +27,10 @@ export const useMemberEventParser = (): MemberEventParser => {
};
const senderName = getMxIdLocalPart(senderId);
const userName = content.displayname || getMxIdLocalPart(userId);
const userName =
typeof content.displayname === 'string'
? content.displayname || getMxIdLocalPart(userId)
: getMxIdLocalPart(userId);
if (isMembershipChanged(mEvent)) {
if (content.membership === Membership.Invite) {
@ -39,7 +43,7 @@ export const useMemberEventParser = (): MemberEventParser => {
{' accepted '}
<b>{userName}</b>
{`'s join request `}
{content.reason}
{reason}
</>
),
};
@ -51,7 +55,7 @@ export const useMemberEventParser = (): MemberEventParser => {
<>
<b>{senderName}</b>
{' invited '}
<b>{userName}</b> {content.reason}
<b>{userName}</b> {reason}
</>
),
};
@ -64,7 +68,7 @@ export const useMemberEventParser = (): MemberEventParser => {
<>
<b>{userName}</b>
{' request to join room '}
{content.reason}
{reason}
</>
),
};
@ -91,7 +95,7 @@ export const useMemberEventParser = (): MemberEventParser => {
<>
<b>{userName}</b>
{' rejected the invitation '}
{content.reason}
{reason}
</>
) : (
<>
@ -99,7 +103,7 @@ export const useMemberEventParser = (): MemberEventParser => {
{' rejected '}
<b>{userName}</b>
{`'s join request `}
{content.reason}
{reason}
</>
),
};
@ -113,7 +117,7 @@ export const useMemberEventParser = (): MemberEventParser => {
<>
<b>{userName}</b>
{' revoked joined request '}
{content.reason}
{reason}
</>
) : (
<>
@ -121,7 +125,7 @@ export const useMemberEventParser = (): MemberEventParser => {
{' revoked '}
<b>{userName}</b>
{`'s invite `}
{content.reason}
{reason}
</>
),
};
@ -134,7 +138,7 @@ export const useMemberEventParser = (): MemberEventParser => {
<>
<b>{senderName}</b>
{' unbanned '}
<b>{userName}</b> {content.reason}
<b>{userName}</b> {reason}
</>
),
};
@ -147,13 +151,13 @@ export const useMemberEventParser = (): MemberEventParser => {
<>
<b>{userName}</b>
{' left the room '}
{content.reason}
{reason}
</>
) : (
<>
<b>{senderName}</b>
{' kicked '}
<b>{userName}</b> {content.reason}
<b>{userName}</b> {reason}
</>
),
};
@ -166,7 +170,7 @@ export const useMemberEventParser = (): MemberEventParser => {
<>
<b>{senderName}</b>
{' banned '}
<b>{userName}</b> {content.reason}
<b>{userName}</b> {reason}
</>
),
};
@ -174,44 +178,49 @@ export const useMemberEventParser = (): MemberEventParser => {
}
if (content.displayname !== prevContent.displayname) {
const prevUserName = prevContent.displayname || userId;
const prevUserName =
typeof prevContent.displayname === 'string'
? prevContent.displayname || getMxIdLocalPart(userId)
: getMxIdLocalPart(userId);
return {
icon: Icons.Mention,
body: content.displayname ? (
<>
<b>{prevUserName}</b>
{' changed display name to '}
<b>{userName}</b>
</>
) : (
<>
<b>{prevUserName}</b>
{' removed their display name '}
</>
),
body:
typeof content.displayname === 'string' ? (
<>
<b>{prevUserName}</b>
{' changed display name to '}
<b>{userName}</b>
</>
) : (
<>
<b>{prevUserName}</b>
{' removed their display name '}
</>
),
};
}
if (content.avatar_url !== prevContent.avatar_url) {
return {
icon: Icons.User,
body: content.displayname ? (
<>
<b>{userName}</b>
{' changed their avatar'}
</>
) : (
<>
<b>{userName}</b>
{' removed their avatar '}
</>
),
body:
content.avatar_url && typeof content.avatar_url === 'string' ? (
<>
<b>{userName}</b>
{' changed their avatar'}
</>
) : (
<>
<b>{userName}</b>
{' removed their avatar '}
</>
),
};
}
return {
icon: Icons.User,
body: 'Broken membership event',
body: 'Membership event with no changes',
};
};