diff --git a/app/models/event/description.rb b/app/models/event/description.rb
index 672784ddb..f44233011 100644
--- a/app/models/event/description.rb
+++ b/app/models/event/description.rb
@@ -14,7 +14,7 @@ class Event::Description
end
def to_plain_text
- to_sentence(creator_name, card.title)
+ to_sentence(creator_name, h(card.title))
end
private
diff --git a/test/models/event/description_test.rb b/test/models/event/description_test.rb
index e5bd583a7..3139a0c47 100644
--- a/test/models/event/description_test.rb
+++ b/test/models/event/description_test.rb
@@ -32,4 +32,14 @@ class Event::DescriptionTest < ActiveSupport::TestCase
assert_includes description.to_plain_text, "David added"
end
+
+ test "escapes html in card titles in plain text description" do
+ card = cards(:logo)
+ card.update_column(:title, "")
+
+ description = events(:logo_published).description_for(users(:david))
+
+ assert_includes description.to_plain_text, "<script>alert('xss')</script>"
+ assert_not_includes description.to_plain_text, "