diff --git a/lib/src/utils/markdown.dart b/lib/src/utils/markdown.dart
index df55eabf..c6b86185 100644
--- a/lib/src/utils/markdown.dart
+++ b/lib/src/utils/markdown.dart
@@ -19,6 +19,8 @@
import 'package:markdown/markdown.dart';
import 'dart:convert';
+const htmlAttrEscape = HtmlEscape(HtmlEscapeMode.attribute);
+
class LinebreakSyntax extends InlineSyntax {
LinebreakSyntax() : super(r'\n');
@@ -51,7 +53,7 @@ class SpoilerSyntax extends TagSyntax {
bool onMatchEnd(InlineParser parser, Match match, TagState state) {
final element = Element('span', state.children);
element.attributes['data-mx-spoiler'] =
- htmlEscape.convert(reasonMap[match.input] ?? '');
+ htmlAttrEscape.convert(reasonMap[match.input] ?? '');
parser.addNode(element);
return true;
}
@@ -84,9 +86,9 @@ class EmoteSyntax extends InlineSyntax {
}
final element = Element.empty('img');
element.attributes['data-mx-emoticon'] = '';
- element.attributes['src'] = htmlEscape.convert(mxc);
- element.attributes['alt'] = htmlEscape.convert(emote);
- element.attributes['title'] = htmlEscape.convert(emote);
+ element.attributes['src'] = htmlAttrEscape.convert(mxc);
+ element.attributes['alt'] = htmlAttrEscape.convert(emote);
+ element.attributes['title'] = htmlAttrEscape.convert(emote);
element.attributes['height'] = '32';
element.attributes['vertical-align'] = 'middle';
parser.addNode(element);
diff --git a/test/markdown_test.dart b/test/markdown_test.dart
index 93532cc1..265ae0c1 100644
--- a/test/markdown_test.dart
+++ b/test/markdown_test.dart
@@ -54,11 +54,11 @@ void main() {
});
test('emotes', () {
expect(markdown(':fox:', emotePacks),
- '
');
+ '
');
expect(markdown(':user~fox:', emotePacks),
- '
');
+ '
');
expect(markdown(':raccoon:', emotePacks),
- '
');
+ '
');
expect(markdown(':invalid:', emotePacks), ':invalid:');
expect(markdown(':room~invalid:', emotePacks), ':room~invalid:');
});