rack-utf8_sanitizer 1.5.0 → 1.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/lib/rack/utf8_sanitizer.rb +16 -1
- data/rack-utf8_sanitizer.gemspec +1 -1
- data/test/test_utf8_sanitizer.rb +28 -0
- metadata +3 -3
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 | 
            -
             | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 2 | 
            +
            SHA256:
         | 
| 3 | 
            +
              metadata.gz: 53093765db81984315b860f92ab0c1b51cc2e458147bc3cfb3d289424fb9b6d0
         | 
| 4 | 
            +
              data.tar.gz: 21493f9709c2db974d65612a8f22328824f74118ee500f37eeafe957a3dd1d39
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 621f2ea1b68feaf198d558d22cdc9dbb22a1133cb61f755450c80757bc4e848a80b337657f0356d59ebef869633e348bb3392612ec7fe7954dc1134f03b04e5a
         | 
| 7 | 
            +
              data.tar.gz: 917f05a6ed39b0656c84f60a076b072ed141418f15aa7b26d43c707be8268a739b1ce698955669bb8620f6e9f0c887e2c24a354f508a7e574af308c513e9da96
         | 
    
        data/lib/rack/utf8_sanitizer.rb
    CHANGED
    
    | @@ -63,6 +63,7 @@ module Rack | |
| 63 63 |  | 
| 64 64 | 
             
                def sanitize(env)
         | 
| 65 65 | 
             
                  sanitize_rack_input(env)
         | 
| 66 | 
            +
                  sanitize_cookies(env)
         | 
| 66 67 | 
             
                  env.each do |key, value|
         | 
| 67 68 | 
             
                    next if skip?(key)
         | 
| 68 69 |  | 
| @@ -105,7 +106,7 @@ module Rack | |
| 105 106 | 
             
                  return unless @sanitizable_content_types.any? {|type| content_type == type }
         | 
| 106 107 | 
             
                  uri_encoded = URI_ENCODED_CONTENT_TYPES.any? {|type| content_type == type}
         | 
| 107 108 |  | 
| 108 | 
            -
                  if env[ | 
| 109 | 
            +
                  if env['rack.input']
         | 
| 109 110 | 
             
                    sanitized_input = sanitize_io(env['rack.input'], uri_encoded)
         | 
| 110 111 |  | 
| 111 112 | 
             
                    env['rack.input'] = sanitized_input
         | 
| @@ -159,6 +160,20 @@ module Rack | |
| 159 160 | 
             
                  SanitizedRackInput.new(io, StringIO.new(sanitized_input))
         | 
| 160 161 | 
             
                end
         | 
| 161 162 |  | 
| 163 | 
            +
                # Cookies need to be split and then sanitized as url encoded strings
         | 
| 164 | 
            +
                # since the cookie string itself is not url encoded (separated by `;`),
         | 
| 165 | 
            +
                # and the normal method of `sanitize_uri_encoded_string` would break
         | 
| 166 | 
            +
                # later cookie parsing in the case that a cookie value contained an
         | 
| 167 | 
            +
                # encoded `;`.
         | 
| 168 | 
            +
                def sanitize_cookies(env)
         | 
| 169 | 
            +
                  return unless env['HTTP_COOKIE']
         | 
| 170 | 
            +
             | 
| 171 | 
            +
                  env['HTTP_COOKIE'] = env['HTTP_COOKIE']
         | 
| 172 | 
            +
                    .split(/[;,] */n)
         | 
| 173 | 
            +
                    .map { |cookie| sanitize_uri_encoded_string(cookie) }
         | 
| 174 | 
            +
                    .join('; ')
         | 
| 175 | 
            +
                end
         | 
| 176 | 
            +
             | 
| 162 177 | 
             
                # URI.encode/decode expect the input to be in ASCII-8BIT.
         | 
| 163 178 | 
             
                # However, there could be invalid UTF-8 characters both in
         | 
| 164 179 | 
             
                # raw and percent-encoded form.
         | 
    
        data/rack-utf8_sanitizer.gemspec
    CHANGED
    
    
    
        data/test/test_utf8_sanitizer.rb
    CHANGED
    
    | @@ -325,6 +325,34 @@ describe Rack::UTF8Sanitizer do | |
| 325 325 | 
             
                end
         | 
| 326 326 | 
             
              end
         | 
| 327 327 |  | 
| 328 | 
            +
              describe "with custom content-type" do
         | 
| 329 | 
            +
                def request_env
         | 
| 330 | 
            +
                  {
         | 
| 331 | 
            +
                      "REQUEST_METHOD" => "GET",
         | 
| 332 | 
            +
                      "CONTENT_TYPE" => "application/json",
         | 
| 333 | 
            +
                      "HTTP_COOKIE" => @cookie,
         | 
| 334 | 
            +
                      "rack.input" => StringIO.new,
         | 
| 335 | 
            +
                  }
         | 
| 336 | 
            +
                end
         | 
| 337 | 
            +
             | 
| 338 | 
            +
                it "sanitizes bad http cookie" do
         | 
| 339 | 
            +
                  @cookie = "foo=bla; quux=bar\xED"
         | 
| 340 | 
            +
                  response_env = @app.(request_env)
         | 
| 341 | 
            +
                  response_env['HTTP_COOKIE'].should != @cookie
         | 
| 342 | 
            +
                  response_env['HTTP_COOKIE'].should == 'foo=bla; quux=bar%EF%BF%BD'
         | 
| 343 | 
            +
                end
         | 
| 344 | 
            +
             | 
| 345 | 
            +
                it "does not change ok http cookie" do
         | 
| 346 | 
            +
                  @cookie = "foo=bla; quux=bar"
         | 
| 347 | 
            +
                  response_env = @app.(request_env)
         | 
| 348 | 
            +
                  response_env['HTTP_COOKIE'].should == @cookie
         | 
| 349 | 
            +
             | 
| 350 | 
            +
                  @cookie = "foo=b%3bla; quux=b%20a%20r"
         | 
| 351 | 
            +
                  response_env = @app.(request_env)
         | 
| 352 | 
            +
                  response_env['HTTP_COOKIE'].should == @cookie
         | 
| 353 | 
            +
                end
         | 
| 354 | 
            +
              end
         | 
| 355 | 
            +
             | 
| 328 356 | 
             
              describe "with custom content-type" do
         | 
| 329 357 | 
             
                def request_env
         | 
| 330 358 | 
             
                  @plain_input = "foo bar лол".force_encoding('UTF-8')
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: rack-utf8_sanitizer
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 1. | 
| 4 | 
            +
              version: 1.6.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - whitequark
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2018- | 
| 11 | 
            +
            date: 2018-06-06 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: rack
         | 
| @@ -110,7 +110,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 110 110 | 
             
                  version: '0'
         | 
| 111 111 | 
             
            requirements: []
         | 
| 112 112 | 
             
            rubyforge_project: 
         | 
| 113 | 
            -
            rubygems_version: 2. | 
| 113 | 
            +
            rubygems_version: 2.7.6
         | 
| 114 114 | 
             
            signing_key: 
         | 
| 115 115 | 
             
            specification_version: 4
         | 
| 116 116 | 
             
            summary: Rack::UTF8Sanitizer is a Rack middleware which cleans up invalid UTF8 characters
         |