2022-07-31 14:56:44 +02:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
2022-02-05 13:32:44 +01:00
|
|
|
RSpec.describe Rack::Protection::EscapedParams do
|
2022-07-31 14:56:44 +02:00
|
|
|
it_behaves_like 'any rack application'
|
2011-05-25 11:55:05 +02:00
|
|
|
|
2011-05-25 11:49:39 +02:00
|
|
|
context 'escaping' do
|
|
|
|
it 'escapes html entities' do
|
|
|
|
mock_app do |env|
|
|
|
|
request = Rack::Request.new(env)
|
2022-07-31 14:56:44 +02:00
|
|
|
[200, { 'Content-Type' => 'text/plain' }, [request.params['foo']]]
|
2011-05-25 11:49:39 +02:00
|
|
|
end
|
2022-07-31 14:56:44 +02:00
|
|
|
get '/', foo: '<bar>'
|
2014-09-03 01:54:36 +02:00
|
|
|
expect(body).to eq('<bar>')
|
2011-05-25 11:49:39 +02:00
|
|
|
end
|
|
|
|
|
|
|
|
it 'leaves normal params untouched' do
|
|
|
|
mock_app do |env|
|
|
|
|
request = Rack::Request.new(env)
|
2022-07-31 14:56:44 +02:00
|
|
|
[200, { 'Content-Type' => 'text/plain' }, [request.params['foo']]]
|
2011-05-25 11:49:39 +02:00
|
|
|
end
|
2022-07-31 14:56:44 +02:00
|
|
|
get '/', foo: 'bar'
|
2014-09-03 01:54:36 +02:00
|
|
|
expect(body).to eq('bar')
|
2011-05-25 11:49:39 +02:00
|
|
|
end
|
|
|
|
|
|
|
|
it 'copes with nested arrays' do
|
|
|
|
mock_app do |env|
|
|
|
|
request = Rack::Request.new(env)
|
2022-07-31 14:56:44 +02:00
|
|
|
[200, { 'Content-Type' => 'text/plain' }, [request.params['foo']['bar']]]
|
2011-05-25 11:49:39 +02:00
|
|
|
end
|
2022-07-31 14:56:44 +02:00
|
|
|
get '/', foo: { bar: '<bar>' }
|
2014-09-03 01:54:36 +02:00
|
|
|
expect(body).to eq('<bar>')
|
2011-05-25 11:49:39 +02:00
|
|
|
end
|
2012-07-02 11:14:57 -04:00
|
|
|
|
|
|
|
it 'leaves cache-breaker params untouched' do
|
2022-07-31 14:56:44 +02:00
|
|
|
mock_app do |_env|
|
|
|
|
[200, { 'Content-Type' => 'text/plain' }, ['hi']]
|
2012-07-02 11:14:57 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
get '/?95df8d9bf5237ad08df3115ee74dcb10'
|
2014-09-03 01:54:36 +02:00
|
|
|
expect(body).to eq('hi')
|
2012-07-02 11:14:57 -04:00
|
|
|
end
|
2015-09-30 16:51:50 -05:00
|
|
|
|
|
|
|
it 'leaves TempFiles untouched' do
|
|
|
|
mock_app do |env|
|
|
|
|
request = Rack::Request.new(env)
|
2022-07-31 14:56:44 +02:00
|
|
|
[200, { 'Content-Type' => 'text/plain' }, ["#{request.params['file'][:filename]}\n#{request.params['file'][:tempfile].read}\n#{request.params['other']}"]]
|
2015-09-30 16:51:50 -05:00
|
|
|
end
|
|
|
|
|
|
|
|
temp_file = File.open('_escaped_params_tmp_file', 'w')
|
|
|
|
begin
|
|
|
|
temp_file.write('hello world')
|
|
|
|
temp_file.close
|
|
|
|
|
2022-07-31 14:56:44 +02:00
|
|
|
post '/', file: Rack::Test::UploadedFile.new(temp_file.path), other: '<bar>'
|
2015-09-30 16:51:50 -05:00
|
|
|
expect(body).to eq("_escaped_params_tmp_file\nhello world\n<bar>")
|
|
|
|
ensure
|
|
|
|
File.unlink(temp_file.path)
|
|
|
|
end
|
|
|
|
end
|
2011-05-25 11:49:39 +02:00
|
|
|
end
|
2011-05-23 17:36:16 +02:00
|
|
|
end
|