Skip to content

Commit c8bf7b2

Browse files
prevent parsing upstream instead of lower level code
1 parent d0d2094 commit c8bf7b2

5 files changed

Lines changed: 37 additions & 33 deletions

File tree

apps/meteor/client/components/message/content/attachments/QuoteAttachment.tsx

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import AttachmentAuthorName from './structure/AttachmentAuthorName';
1313
import AttachmentContent from './structure/AttachmentContent';
1414
import AttachmentDetails from './structure/AttachmentDetails';
1515
import AttachmentInner from './structure/AttachmentInner';
16+
import { useMaxMessageParseSize } from '../../hooks/useMaxMessageParseSize';
1617

1718
// TODO: remove this team collaboration
1819
const quoteStyles = css`
@@ -38,6 +39,7 @@ type QuoteAttachmentProps = {
3839
export const QuoteAttachment = ({ attachment }: QuoteAttachmentProps): ReactElement => {
3940
const formatTime = useTimeAgo();
4041
const displayAvatarPreference = useUserPreference<boolean>('displayAvatars');
42+
const maxMessageParseSize = useMaxMessageParseSize();
4143

4244
return (
4345
<>
@@ -71,7 +73,11 @@ export const QuoteAttachment = ({ attachment }: QuoteAttachmentProps): ReactElem
7173
<Attachments attachments={attachment.attachments} id={attachment.attachments[0]?.title_link} />
7274
</AttachmentInner>
7375
)}
74-
{attachment.md ? <MessageContentBody md={attachment.md} /> : attachment.text.substring(attachment.text.indexOf('\n') + 1)}
76+
{attachment.text?.length <= maxMessageParseSize && attachment.md ? (
77+
<MessageContentBody md={attachment.md} />
78+
) : (
79+
attachment.text.substring(attachment.text.indexOf('\n') + 1)
80+
)}
7581
</AttachmentDetails>
7682
</AttachmentContent>
7783
</>

apps/meteor/client/components/message/hooks/useNormalizedMessage.ts

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,20 @@ export const useNormalizedMessage = <TMessage extends IMessage>(message: TMessag
7777
}),
7878
};
7979

80-
const normalizedMessage = parseMessageTextToAstMarkdown(message, parseOptions, autoTranslateOptions, maxMessageParseSize);
80+
if (message.msg && message.msg.length > maxMessageParseSize) {
81+
return {
82+
...message,
83+
md: [
84+
{
85+
type: 'PARAGRAPH',
86+
value: [{ type: 'PLAIN_TEXT', value: message.msg }],
87+
},
88+
],
89+
attachments: message.attachments,
90+
};
91+
}
92+
93+
const normalizedMessage = parseMessageTextToAstMarkdown(message, parseOptions, autoTranslateOptions);
8194

8295
if (normalizedMessage.attachments) {
8396
normalizedMessage.attachments = normalizeAttachments(

apps/meteor/client/lib/constants.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,4 @@ export const BIO_TEXT_MAX_LENGTH = 260;
33
export const VIDEOCONF_STACK_MAX_USERS = 6;
44
export const NAVIGATION_REGION_ID = 'navigation-region';
55
export const MAX_FILE_SIZE_PREVIEW = 10485760; // 10MB
6-
export const MESSAGE_PARSE_HARD_LIMIT = 5000;
6+
export const MESSAGE_PARSE_HARD_LIMIT = 10000;

apps/meteor/client/lib/parseMessageTextToAstMarkdown.ts

Lines changed: 9 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -28,22 +28,19 @@ export const parseMessageTextToAstMarkdown = <
2828
message: TMessage,
2929
parseOptions: Options,
3030
autoTranslateOptions: AutoTranslateOptions,
31-
maxMessageParseSize: number,
3231
): MessageWithMdEnforced => {
3332
const msg = removePossibleNullMessageValues(message);
3433
const { showAutoTranslate, autoTranslateLanguage } = autoTranslateOptions;
3534
const translations = autoTranslateLanguage && isTranslatedMessage(msg) && msg.translations;
3635
const translated = showAutoTranslate(message);
3736

3837
const text = (translated && translations && translations[autoTranslateLanguage]) || msg.msg;
38+
3939
return {
4040
...msg,
41-
md:
42-
isE2EEMessage(message) || translated
43-
? textToMessageToken(text, parseOptions, maxMessageParseSize)
44-
: (msg.md ?? textToMessageToken(text, parseOptions, maxMessageParseSize)),
41+
md: isE2EEMessage(message) || translated ? textToMessageToken(text, parseOptions) : (msg.md ?? textToMessageToken(text, parseOptions)),
4542
...(msg.attachments && {
46-
attachments: parseMessageAttachments(msg.attachments, parseOptions, { autoTranslateLanguage, translated }, maxMessageParseSize),
43+
attachments: parseMessageAttachments(msg.attachments, parseOptions, { autoTranslateLanguage, translated }),
4744
}),
4845
};
4946
};
@@ -52,15 +49,14 @@ export const parseMessageAttachment = <T extends MessageAttachment>(
5249
attachment: T,
5350
parseOptions: Options,
5451
autoTranslateOptions: { autoTranslateLanguage?: string; translated: boolean },
55-
maxMessageParseSize: number,
5652
): T => {
5753
const { translated, autoTranslateLanguage } = autoTranslateOptions;
5854
if (!attachment.text) {
5955
return attachment;
6056
}
6157

6258
if (isQuoteAttachment(attachment) && attachment.attachments) {
63-
attachment.attachments = parseMessageAttachments(attachment.attachments, parseOptions, autoTranslateOptions, maxMessageParseSize);
59+
attachment.attachments = parseMessageAttachments(attachment.attachments, parseOptions, autoTranslateOptions);
6460
}
6561

6662
const text =
@@ -70,18 +66,15 @@ export const parseMessageAttachment = <T extends MessageAttachment>(
7066

7167
return {
7268
...attachment,
73-
md: translated
74-
? textToMessageToken(text, parseOptions, maxMessageParseSize)
75-
: (attachment.md ?? textToMessageToken(text, parseOptions, maxMessageParseSize)),
69+
md: translated ? textToMessageToken(text, parseOptions) : (attachment.md ?? textToMessageToken(text, parseOptions)),
7670
};
7771
};
7872

7973
export const parseMessageAttachments = <T extends MessageAttachment>(
8074
attachments: T[],
8175
parseOptions: Options,
8276
autoTranslateOptions: { autoTranslateLanguage?: string; translated: boolean },
83-
maxMessageParseSize: number,
84-
): T[] => attachments.map((attachment) => parseMessageAttachment(attachment, parseOptions, autoTranslateOptions, maxMessageParseSize));
77+
): T[] => attachments.map((attachment) => parseMessageAttachment(attachment, parseOptions, autoTranslateOptions));
8578

8679
const isNotNullOrUndefined = (value: unknown): boolean => value !== null && value !== undefined;
8780

@@ -112,30 +105,17 @@ export const removePossibleNullMessageValues = <TMessage extends IMessage = IMes
112105
...(isNotNullOrUndefined(reactions) && { reactions }),
113106
});
114107

115-
const textToMessageToken = (textOrRoot: string | Root, parseOptions: Options, maxMessageParseSize: number): Root => {
108+
const textToMessageToken = (textOrRoot: string | Root, parseOptions: Options): Root => {
116109
if (!textOrRoot) {
117110
return [];
118111
}
119112

120113
if (isParsedMessage(textOrRoot)) {
121114
return textOrRoot;
122115
}
123-
if (textOrRoot.length > maxMessageParseSize) {
124-
return [
125-
{
126-
type: 'PARAGRAPH',
127-
value: [
128-
{
129-
type: 'PLAIN_TEXT',
130-
value: textOrRoot,
131-
},
132-
],
133-
},
134-
];
135-
}
136-
const result = parse(textOrRoot, parseOptions);
116+
const parsedMessage = parse(textOrRoot, parseOptions);
137117

138-
const parsedMessageCleaned = result[0].type !== 'LINE_BREAK' ? result : (result.slice(1) as Root);
118+
const parsedMessageCleaned = parsedMessage[0].type !== 'LINE_BREAK' ? parsedMessage : (parsedMessage.slice(1) as Root);
139119

140120
return parsedMessageCleaned;
141121
};

apps/meteor/client/views/room/MessageList/hooks/useMessageBody.tsx

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,17 @@ export const useMessageBody = (message: IMessage | undefined, maxMessageParseSiz
1515
return '';
1616
}
1717

18+
if (message.msg && message.msg.length > maxMessageParseSize) {
19+
return message.msg;
20+
}
21+
1822
if (message.md) {
1923
const parseOptions: Options = {
2024
customDomains,
2125
emoticons: true,
2226
};
23-
const messageWithMd = parseMessageTextToAstMarkdown(message, parseOptions, autoTranslateOptions, maxMessageParseSize);
27+
28+
const messageWithMd = parseMessageTextToAstMarkdown(message, parseOptions, autoTranslateOptions);
2429

2530
return messageWithMd.md;
2631
}

0 commit comments

Comments
 (0)