From ee48548fd6b500d01392888ae72c531193e2a4db Mon Sep 17 00:00:00 2001
From: Jeffrey Phillips Freeman <the@jeffreyfreeman.me>
Date: Mon, 16 Oct 2023 22:54:49 -0400
Subject: [PATCH] Fixed a bug where backslashes can cause json not to render

---
 CHANGELOG.md                  | 2 ++
 layouts/partials/status.ajson | 9 ++++++++-
 2 files changed, 10 insertions(+), 1 deletion(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index b8fcfb0c3..6ea5b23bf 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -24,6 +24,8 @@
 * Added MathJax support for rendering Latex and math.
 * Added support for PseudocodeJS for rendering beautiful, standard, pseudocode.
 * Table of contents will now render if frontmatter `toc` is set to `true`.
+* Fixed a bug where backslashes in the summary of a post could break ActivityPub
+    JSON endpoints.
 
 ## 1.1.0
 
diff --git a/layouts/partials/status.ajson b/layouts/partials/status.ajson
index a74ab0b62..1db70700d 100644
--- a/layouts/partials/status.ajson
+++ b/layouts/partials/status.ajson
@@ -1,3 +1,10 @@
+{{- $summaryClean := "" }}
+{{- if .Summary }}
+{{- $summaryClean = .Summary }}
+{{- $summaryClean = replace $summaryClean "\n" "<br>" }}
+{{- $summaryClean = replace $summaryClean "\r" "" }}
+{{- $summaryClean = replace $summaryClean "\\" "\\\\" }}
+{{- end }}
 {
   {{ partial "context.ajson" . }},
   "id": "{{ .Permalink }}",
@@ -12,7 +19,7 @@
   "sensitive": false,
   "atomUri": "{{ .Permalink }}",
   "inReplyToAtomUri": null,
-  "content": {{ printf "\"" | safeHTML }}<b>{{.Title}}</b>{{ if .Summary }}<br>{{ replace (replace .Summary "\n" "<br>") "\r" "" | safeHTML}}{{ end }}<br><br>Read more here:<br><a href='{{.Permalink}}'>{{.Permalink}}</a><br><br>{{ if .Site.Params.renderArticleHashtags }}{{ if .Params.tags }}{{ range $indexArticleTags, $elementArticleTag := .Params.tags }}{{ if ne $indexArticleTags 0 }} {{ end }}<a href='{{ site.BaseURL }}tags/{{ $elementArticleTag | lower }}' class='mention hashtag' rel='tag'>#<span>{{ $elementArticleTag }}</span></a>{{ end }}{{ end }}{{ end }} {{ if .Site.Params.renderDefaultHashtags }}{{ if .Site.Params.postHashtags }}{{ range $indexTags, $elementTag := .Site.Params.postHashtags }}{{ if ne $indexTags 0 }} {{ end }}<a href='#' class='mention hashtag' rel='tag'>#<span>{{ $elementTag }}</span></a>{{ end }}{{ end }}{{ end }}{{ printf "\"" | safeHTML }},
+  "content": {{ printf "\"" | safeHTML }}<b>{{.Title}}</b>{{ if .Summary }}<br>{{ $summaryClean | safeHTML}}{{ end }}<br><br>Read more here:<br><a href='{{.Permalink}}'>{{.Permalink}}</a><br><br>{{ if .Site.Params.renderArticleHashtags }}{{ if .Params.tags }}{{ range $indexArticleTags, $elementArticleTag := .Params.tags }}{{ if ne $indexArticleTags 0 }} {{ end }}<a href='{{ site.BaseURL }}tags/{{ $elementArticleTag | lower }}' class='mention hashtag' rel='tag'>#<span>{{ $elementArticleTag }}</span></a>{{ end }}{{ end }}{{ end }} {{ if .Site.Params.renderDefaultHashtags }}{{ if .Site.Params.postHashtags }}{{ range $indexTags, $elementTag := .Site.Params.postHashtags }}{{ if ne $indexTags 0 }} {{ end }}<a href='#' class='mention hashtag' rel='tag'>#<span>{{ $elementTag }}</span></a>{{ end }}{{ end }}{{ end }}{{ printf "\"" | safeHTML }},
   "attachment": [],
   {{ if (or (and .Site.Params.postHashtags .Site.Params.renderDefaultHashtags) (and .Params.tags .Site.Params.renderArticleHashtags)) }}
   "tag": [
-- 
GitLab