diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 3ad0ece5e..68b4a82d4 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -25,14 +25,7 @@ module ApplicationHelper def escape_unicode(javascript) if javascript - javascript = javascript.dup.force_encoding("utf-8") - - unless javascript.valid_encoding? - # work around bust string with a double conversion - javascript.encode!("utf-16","utf-8",:invalid => :replace) - javascript.encode!("utf-8","utf-16") - end - + javascript = javascript.scrub javascript.gsub!(/\342\200\250/u, '
') javascript.gsub!(/(<\/)/u, '\u003C/') javascript.html_safe diff --git a/lib/email/receiver.rb b/lib/email/receiver.rb index fdb700928..8a5d054ee 100644 --- a/lib/email/receiver.rb +++ b/lib/email/receiver.rb @@ -94,10 +94,10 @@ module Email end def discourse_email_parser - lines = @body.lines.to_a + lines = @body.scrub.lines.to_a range_end = 0 - email_year = lines.each_with_index do |l, idx| + lines.each_with_index do |l, idx| break if l =~ /\A\s*\-{3,80}\s*\z/ || l =~ Regexp.new("\\A\\s*" + I18n.t('user_notifications.previous_discussion') + "\\s*\\Z") || (l =~ /via #{SiteSetting.title}(.*)\:$/) || diff --git a/lib/freedom_patches/scrub.rb b/lib/freedom_patches/scrub.rb new file mode 100644 index 000000000..c202dbd5b --- /dev/null +++ b/lib/freedom_patches/scrub.rb @@ -0,0 +1,16 @@ +class String + # A poor man's scrub, Ruby 2.1 has a much better implementation, but this will do + unless method_defined? :scrub + def scrub + str = dup.force_encoding("utf-8") + + unless str.valid_encoding? + # work around bust string with a double conversion + str.encode!("utf-16","utf-8",:invalid => :replace) + str.encode!("utf-8","utf-16") + end + + str + end + end +end