diff --git a/app/assets/javascripts/discourse/controllers/composer.js.es6 b/app/assets/javascripts/discourse/controllers/composer.js.es6
index b1bf16cf2..b13e46c00 100644
--- a/app/assets/javascripts/discourse/controllers/composer.js.es6
+++ b/app/assets/javascripts/discourse/controllers/composer.js.es6
@@ -181,11 +181,11 @@ export default DiscourseController.extend({
// for now handle a very narrow use case
// if we are replying to a topic AND not on the topic pop the window up
- if(!force && composer.get('replyingToTopic')) {
+ if (!force && composer.get('replyingToTopic')) {
var topic = this.get('topic');
if (!topic || topic.get('id') !== composer.get('topic.id'))
{
- var message = I18n.t("composer.posting_not_on_topic", {title: this.get('model.topic.title')});
+ var message = I18n.t("composer.posting_not_on_topic");
var buttons = [{
"label": I18n.t("composer.cancel"),
@@ -193,11 +193,11 @@ export default DiscourseController.extend({
"link": true
}];
- if(topic) {
+ if (topic) {
buttons.push({
- "label": I18n.t("composer.reply_here") + "
" + topic.get('title') + "
",
+ "label": I18n.t("composer.reply_here") + "
" + Handlebars.Utils.escapeExpression(topic.get('title')) + "
",
"class": "btn btn-reply-here",
- "callback": function(){
+ "callback": function() {
composer.set('topic', topic);
composer.set('post', null);
self.save(true);
@@ -206,14 +206,14 @@ export default DiscourseController.extend({
}
buttons.push({
- "label": I18n.t("composer.reply_original") + "
" + this.get('model.topic.title') + "
",
+ "label": I18n.t("composer.reply_original") + "
" + Handlebars.Utils.escapeExpression(this.get('model.topic.title')) + "
",
"class": "btn-primary btn-reply-on-original",
- "callback": function(){
+ "callback": function() {
self.save(true);
}
});
- bootbox.dialog(message, buttons, {"classes": "reply-where-modal"});
+ bootbox.dialog(message, buttons, { "classes": "reply-where-modal" });
return;
}
}
diff --git a/app/models/topic.rb b/app/models/topic.rb
index 9a0e93d94..19a3da590 100644
--- a/app/models/topic.rb
+++ b/app/models/topic.rb
@@ -249,13 +249,7 @@ class Topic < ActiveRecord::Base
end
def fancy_title
- sanitized_title = title.gsub(/['&\"<>]/, {
- "'" => ''',
- '&' => '&',
- '"' => '"',
- '<' => '<',
- '>' => '>',
- })
+ sanitized_title = ERB::Util.html_escape(title)
return unless sanitized_title
return sanitized_title unless SiteSetting.title_fancy_entities?