Sha256: 045b1f10389623fc3774b3be60b268a15a72446bb1a318c26d35a11f159f35d7

Contents?: true

Size: 1.42 KB

Versions: 6

Compression:

Stored size: 1.42 KB

Contents

# typed: ignore

# Copyright (c) 2015 Sqreen. All Rights Reserved.
# Please refer to our terms for more information: https://www.sqreen.com/terms.html

module Sqreen
  module Kit
    module StringSanitizer
      class << self
        def sanitize(obj)
          case obj
          when String
            sanitize_string(obj)
          when Array
            obj.map { |e| sanitize(e) }
          when Hash
            obj.each_with_object({}) { |(k, v), h| h[sanitize(k)] = sanitize(v) }
          else
            obj
          end
        end

        private

        def sanitize_string_new(s)
          return s if s.encoding == Encoding::UTF_8 && s.valid_encoding?

          s.encode(Encoding::UTF_8, invalid: :replace, undef: :replace)
        end

        def sanitize_string_old(s)
          return s if s.encoding == Encoding::UTF_8 && s.valid_encoding?

          s.encode('utf-16be', invalid: :replace, undef: :replace)
           .encode(Encoding::UTF_8, invalid: :replace, undef: :replace)
        end

        repl_ok = "\x80".dup.force_encoding(Encoding::UTF_8)
                        .encode(Encoding::UTF_8, invalid: :replace, undef: :replace)
                        .valid_encoding?
        if repl_ok
          alias_method :sanitize_string, :sanitize_string_new
        else
          # for Ruby < 2
          alias_method :sanitize_string, :sanitize_string_old
        end
        public :sanitize_string
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
sqreen-kit-0.2.4 lib/sqreen/kit/string_sanitizer.rb
sqreen-kit-0.2.3 lib/sqreen/kit/string_sanitizer.rb
sqreen-kit-0.2.2 lib/sqreen/kit/string_sanitizer.rb
sqreen-kit-0.2.1 lib/sqreen/kit/string_sanitizer.rb
sqreen-kit-0.2.0 lib/sqreen/kit/string_sanitizer.rb
sqreen-kit-0.1.1 lib/sqreen/kit/string_sanitizer.rb