lib/raven/processor/utf8conversion.rb in sentry-raven-2.4.0 vs lib/raven/processor/utf8conversion.rb in sentry-raven-2.5.0

- old
+ new

@@ -1,29 +1,28 @@ module Raven class Processor::UTF8Conversion < Processor def process(value) - if value.is_a? Array - value.map { |v| process v } - elsif value.is_a? Hash - value.merge(value) { |_, v| process v } - elsif value.is_a?(Exception) && !value.message.valid_encoding? + case value + when Array + !value.frozen? ? value.map! { |v| process v } : value.map { |v| process v } + when Hash + !value.frozen? ? value.merge!(value) { |_, v| process v } : value.merge(value) { |_, v| process v } + when Exception + return value if value.message.valid_encoding? clean_exc = value.class.new(clean_invalid_utf8_bytes(value.message)) clean_exc.set_backtrace(value.backtrace) clean_exc - else + when String + return value if value.valid_encoding? clean_invalid_utf8_bytes(value) + else + value end end private def clean_invalid_utf8_bytes(obj) - if obj.respond_to?(:to_utf8) - obj.to_utf8 - elsif obj.respond_to?(:encoding) && obj.is_a?(String) - obj.encode('UTF-16', :invalid => :replace, :undef => :replace, :replace => '').encode('UTF-8') - else - obj - end + obj.encode('UTF-16', :invalid => :replace, :undef => :replace, :replace => '').encode('UTF-8') end end end