Skip to content

Commit 5632d6c

Browse files
authored
HTML-encode markdown content when formatting is disabled (#1545)
1 parent f4d1e63 commit 5632d6c

2 files changed

Lines changed: 24 additions & 22 deletions

File tree

‎DiscordChatExporter.Core/Exporting/MessageGroupTemplate.cshtml‎

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
@using System.Collections.Generic
33
@using System.Linq
44
@using System.Threading.Tasks
5+
@using RazorBlade
56
@using DiscordChatExporter.Core.Discord.Data
67
@using DiscordChatExporter.Core.Discord.Data.Embeds
78
@using DiscordChatExporter.Core.Markdown.Parsing
@@ -23,15 +24,15 @@
2324
string FormatDate(DateTimeOffset instant, string format = "g") =>
2425
Context.FormatDate(instant, format);
2526

26-
async ValueTask<string> FormatMarkdownAsync(string markdown) =>
27+
async ValueTask<IEncodedContent> FormatMarkdownAsync(string markdown) =>
2728
Context.Request.ShouldFormatMarkdown
28-
? await HtmlMarkdownVisitor.FormatAsync(Context, markdown, true, CancellationToken)
29-
: markdown;
29+
? Html.Raw(await HtmlMarkdownVisitor.FormatAsync(Context, markdown, true, CancellationToken))
30+
: Html.Raw(Html.Encode(markdown));
3031

31-
async ValueTask<string> FormatEmbedMarkdownAsync(string markdown) =>
32+
async ValueTask<IEncodedContent> FormatEmbedMarkdownAsync(string markdown) =>
3233
Context.Request.ShouldFormatMarkdown
33-
? await HtmlMarkdownVisitor.FormatAsync(Context, markdown, false, CancellationToken)
34-
: markdown;
34+
? Html.Raw(await HtmlMarkdownVisitor.FormatAsync(Context, markdown, false, CancellationToken))
35+
: Html.Raw(Html.Encode(markdown));
3536
}
3637

3738
<div class="chatlog__message-group">
@@ -179,7 +180,7 @@
179180
<span class="chatlog__reply-link" onclick="scrollToMessage(event, '@message.ReferencedMessage.Id')">
180181
@if (!string.IsNullOrWhiteSpace(message.ReferencedMessage.Content) && !message.ReferencedMessage.IsContentHidden())
181182
{
182-
<!--wmm:ignore-->@Html.Raw(await FormatEmbedMarkdownAsync(message.ReferencedMessage.Content))<!--/wmm:ignore-->
183+
<!--wmm:ignore-->@(await FormatEmbedMarkdownAsync(message.ReferencedMessage.Content))<!--/wmm:ignore-->
183184
}
184185
else if (message.ReferencedMessage.Attachments.Any() || message.ReferencedMessage.Embeds.Any())
185186
{
@@ -252,7 +253,7 @@
252253
@* Text *@
253254
@if (!string.IsNullOrWhiteSpace(message.Content) && !message.IsContentHidden())
254255
{
255-
<span class="chatlog__markdown-preserve"><!--wmm:ignore-->@Html.Raw(await FormatMarkdownAsync(message.Content))<!--/wmm:ignore--></span>
256+
<span class="chatlog__markdown-preserve"><!--wmm:ignore-->@(await FormatMarkdownAsync(message.Content))<!--/wmm:ignore--></span>
256257
}
257258

258259
@* Edited timestamp *@
@@ -278,7 +279,7 @@
278279
@if (!string.IsNullOrWhiteSpace(message.ForwardedMessage.Content))
279280
{
280281
<div class="chatlog__forwarded-content chatlog__markdown">
281-
<span class="chatlog__markdown-preserve"><!--wmm:ignore-->@Html.Raw(await FormatMarkdownAsync(message.ForwardedMessage.Content))<!--/wmm:ignore--></span>
282+
<span class="chatlog__markdown-preserve"><!--wmm:ignore-->@(await FormatMarkdownAsync(message.ForwardedMessage.Content))<!--/wmm:ignore--></span>
282283
</div>
283284
}
284285

@@ -504,12 +505,12 @@
504505
@if (!string.IsNullOrWhiteSpace(embed.Url))
505506
{
506507
<a class="chatlog__embed-title-link" href="@embed.Url">
507-
<div class="chatlog__markdown chatlog__markdown-preserve"><!--wmm:ignore-->@Html.Raw(await FormatEmbedMarkdownAsync(embed.Title))<!--/wmm:ignore--></div>
508+
<div class="chatlog__markdown chatlog__markdown-preserve"><!--wmm:ignore-->@(await FormatEmbedMarkdownAsync(embed.Title))<!--/wmm:ignore--></div>
508509
</a>
509510
}
510511
else
511512
{
512-
<div class="chatlog__markdown chatlog__markdown-preserve"><!--wmm:ignore-->@Html.Raw(await FormatEmbedMarkdownAsync(embed.Title))<!--/wmm:ignore--></div>
513+
<div class="chatlog__markdown chatlog__markdown-preserve"><!--wmm:ignore-->@(await FormatEmbedMarkdownAsync(embed.Title))<!--/wmm:ignore--></div>
513514
}
514515
</div>
515516
}
@@ -543,7 +544,7 @@
543544
</div>
544545
}
545546
// Generic video embed
546-
else if (embed.Kind == EmbedKind.Video
547+
else if (embed.Kind == EmbedKind.Video
547548
&& !string.IsNullOrWhiteSpace(embed.Url)
548549
// Twitch clips cannot be embedded in local HTML files
549550
&& embed.TryGetTwitchClip() is null)
@@ -624,12 +625,12 @@
624625
@if (!string.IsNullOrWhiteSpace(embed.Url))
625626
{
626627
<a class="chatlog__embed-title-link" href="@embed.Url">
627-
<div class="chatlog__markdown chatlog__markdown-preserve"><!--wmm:ignore-->@Html.Raw(await FormatEmbedMarkdownAsync(embed.Title))<!--/wmm:ignore--></div>
628+
<div class="chatlog__markdown chatlog__markdown-preserve"><!--wmm:ignore-->@(await FormatEmbedMarkdownAsync(embed.Title))<!--/wmm:ignore--></div>
628629
</a>
629630
}
630631
else
631632
{
632-
<div class="chatlog__markdown chatlog__markdown-preserve"><!--wmm:ignore-->@Html.Raw(await FormatEmbedMarkdownAsync(embed.Title))<!--/wmm:ignore--></div>
633+
<div class="chatlog__markdown chatlog__markdown-preserve"><!--wmm:ignore-->@(await FormatEmbedMarkdownAsync(embed.Title))<!--/wmm:ignore--></div>
633634
}
634635
</div>
635636
}
@@ -638,7 +639,7 @@
638639
@if (!string.IsNullOrWhiteSpace(embed.Description))
639640
{
640641
<div class="chatlog__embed-description">
641-
<div class="chatlog__markdown chatlog__markdown-preserve"><!--wmm:ignore-->@Html.Raw(await FormatEmbedMarkdownAsync(embed.Description))<!--/wmm:ignore--></div>
642+
<div class="chatlog__markdown chatlog__markdown-preserve"><!--wmm:ignore-->@(await FormatEmbedMarkdownAsync(embed.Description))<!--/wmm:ignore--></div>
642643
</div>
643644
}
644645

@@ -652,14 +653,14 @@
652653
@if (!string.IsNullOrWhiteSpace(field.Name))
653654
{
654655
<div class="chatlog__embed-field-name">
655-
<div class="chatlog__markdown chatlog__markdown-preserve"><!--wmm:ignore-->@Html.Raw(await FormatEmbedMarkdownAsync(field.Name))<!--/wmm:ignore--></div>
656+
<div class="chatlog__markdown chatlog__markdown-preserve"><!--wmm:ignore-->@(await FormatEmbedMarkdownAsync(field.Name))<!--/wmm:ignore--></div>
656657
</div>
657658
}
658659

659660
@if (!string.IsNullOrWhiteSpace(field.Value))
660661
{
661662
<div class="chatlog__embed-field-value">
662-
<div class="chatlog__markdown chatlog__markdown-preserve"><!--wmm:ignore-->@Html.Raw(await FormatEmbedMarkdownAsync(field.Value))<!--/wmm:ignore--></div>
663+
<div class="chatlog__markdown chatlog__markdown-preserve"><!--wmm:ignore-->@(await FormatEmbedMarkdownAsync(field.Value))<!--/wmm:ignore--></div>
663664
</div>
664665
}
665666
</div>

‎DiscordChatExporter.Core/Exporting/PreambleTemplate.cshtml‎

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
@using System
22
@using System.Threading.Tasks
3+
@using RazorBlade
34

45
@inherits RazorBlade.HtmlTemplate
56

@@ -24,10 +25,10 @@
2425
string FormatDate(DateTimeOffset instant, string format = "g") =>
2526
Context.FormatDate(instant, format);
2627

27-
async ValueTask<string> FormatMarkdownAsync(string markdown) =>
28+
async ValueTask<IEncodedContent> FormatMarkdownAsync(string markdown) =>
2829
Context.Request.ShouldFormatMarkdown
29-
? await HtmlMarkdownVisitor.FormatAsync(Context, markdown, true, CancellationToken)
30-
: markdown;
30+
? Html.Raw(await HtmlMarkdownVisitor.FormatAsync(Context, markdown, true, CancellationToken))
31+
: Html.Raw(Html.Encode(markdown));
3132
}
3233

3334
<!DOCTYPE html>
@@ -748,7 +749,7 @@
748749
.chatlog__embed-spotify {
749750
border: 0;
750751
}
751-
752+
752753
.chatlog__embed-twitch {
753754
border: 0;
754755
}
@@ -1063,7 +1064,7 @@
10631064

10641065
@if (!string.IsNullOrWhiteSpace(Context.Request.Channel.Topic))
10651066
{
1066-
<div class="preamble__entry preamble__entry--small">@Html.Raw(await FormatMarkdownAsync(Context.Request.Channel.Topic))</div>
1067+
<div class="preamble__entry preamble__entry--small">@(await FormatMarkdownAsync(Context.Request.Channel.Topic))</div>
10671068
}
10681069

10691070
@if (Context.Request.After is not null || Context.Request.Before is not null)

0 commit comments

Comments
 (0)