Sha256: 7e0dad7931c66b4b1a4a8f0176478fe4c504963dc407368db291e47d72251c21

Contents?: true

Size: 861 Bytes

Versions: 1

Compression:

Stored size: 861 Bytes

Contents

module Raven
  class Processor::UTF8Conversion < Processor
    def process(value)
      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
      when String
        return value if value.valid_encoding?
        clean_invalid_utf8_bytes(value)
      else
        value
      end
    end

    private

    def clean_invalid_utf8_bytes(obj)
      obj.encode('UTF-16', :invalid => :replace, :undef => :replace, :replace => '').encode('UTF-8')
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
sentry-raven-2.5.0 lib/raven/processor/utf8conversion.rb