Skip to content

Commit 50a9247

Browse files
authored
Merge pull request #35 from rickselby/query-string-fix
Fix double-escaped query string
2 parents 7364305 + 473d28e commit 50a9247

File tree

2 files changed

+27
-2
lines changed

2 files changed

+27
-2
lines changed

Diff for: lib/serverless_rack.rb

+2-2
Original file line numberDiff line numberDiff line change
@@ -45,9 +45,9 @@ def parse_path_info(event)
4545

4646
def parse_query_string(event)
4747
if event.include? 'multiValueQueryStringParameters'
48-
Rack::Utils.build_query(event['multiValueQueryStringParameters'] || {})
48+
Rack::Utils.unescape(Rack::Utils.build_query(event['multiValueQueryStringParameters'] || {}))
4949
else
50-
Rack::Utils.build_query(event['queryStringParameters'] || {})
50+
Rack::Utils.unescape(Rack::Utils.build_query(event['queryStringParameters'] || {}))
5151
end
5252
end
5353

Diff for: spec/rack_adapter_spec.rb

+25
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,31 @@
180180
)
181181
end
182182

183+
it 'handles escaped characters in parameters' do
184+
@event['queryStringParameters'] = { 'param1' => 'value%231', 'param2' => 'value%232' }
185+
186+
handler(
187+
event: @event,
188+
context: { 'memory_limit_in_mb' => '128' }
189+
)
190+
191+
expect(@app.last_environ['QUERY_STRING']).to eq('param1=value%231&param2=value%232')
192+
end
193+
194+
it 'handles escaped characters in multi-value query string parameters' do
195+
@event['multiValueQueryStringParameters'] = {
196+
'param1' => ['value%231'],
197+
'param2' => %w[value%232 value%233]
198+
}
199+
200+
handler(
201+
event: @event,
202+
context: { 'memory_limit_in_mb' => '128' }
203+
)
204+
205+
expect(@app.last_environ['QUERY_STRING']).to eq('param1=value%231&param2=value%232&param2=value%233')
206+
end
207+
183208
it 'handles a request in china region' do
184209
@event['headers']['Host'] = 'x.amazonaws.com.cn'
185210

0 commit comments

Comments
 (0)