diff --git a/js/views/message_view.js b/js/views/message_view.js
index ddae6183f..9e4d98144 100644
--- a/js/views/message_view.js
+++ b/js/views/message_view.js
@@ -31,7 +31,6 @@
}
});
-
var ContentMessageView = Whisper.View.extend({
tagName: 'div',
template: $('#message').html(),
@@ -45,6 +44,9 @@
renderDelivered: function() {
if (this.model.get('delivered')) { this.$el.addClass('delivered'); }
},
+ autoLink: function(text) {
+ return text.replace(/(^|[\s\n]|
)((?:https?|ftp):\/\/[\-A-Z0-9+\u0026\u2019@#\/%?=()~_|!:,.;]*[\-A-Z0-9+\u0026@#\/%=~()_|])/gi, "$1$2");
+ },
render: function() {
this.$el.html(
Mustache.render(this.template, {
@@ -54,6 +56,9 @@
})
);
+ var content = this.$el.find('.content');
+ content.html(this.autoLink(content.html()));
+
this.renderDelivered();
this.$el.find('.attachments').append(
diff --git a/test/index.html b/test/index.html
index a0da11954..e3acb6029 100644
--- a/test/index.html
+++ b/test/index.html
@@ -47,16 +47,13 @@
';
+ message.set('body', xss);
+ var view = new Whisper.MessageView({model: message});
+ view.render();
+ assert.include(view.$el.text(), xss); // should appear as escaped text
+ assert.strictEqual(view.$el.find('script').length, 0); // should not appear as html
+ });
});