Skip to content

Commit 333135d

Browse files
committed
merge
2 parents 45be28e + 0433ed6 commit 333135d

File tree

2 files changed

+22
-11
lines changed

2 files changed

+22
-11
lines changed

‎lib/goliath/rack/params.rb‎

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -38,17 +38,21 @@ def retrieve_params(env)
3838
body=env['rack.input'].read
3939
env['rack.input'].rewind
4040

41-
begin
42-
post_params=case(env['CONTENT_TYPE'])
43-
whenURL_ENCODEDthen
44-
::Rack::Utils.parse_nested_query(body)
45-
whenJSON_ENCODEDthen
46-
MultiJson.decode(body)
47-
else
48-
{}
41+
unlessbody.empty?
42+
begin
43+
post_params=case(env['CONTENT_TYPE'])
44+
whenURL_ENCODEDthen
45+
::Rack::Utils.parse_nested_query(body)
46+
whenJSON_ENCODEDthen
47+
MultiJson.decode(body)
48+
else
49+
{}
50+
end
51+
rescueStandardError=>e
52+
raiseGoliath::Validation::BadRequestError,"Invalid parameters: #{e.class.to_s}"
4953
end
50-
rescueStandardError=>e
51-
raiseGoliath::Validation::BadRequestError.new("Invalid parameters: #{e.class.to_s}")
54+
else
55+
post_params={}
5256
end
5357
end
5458

‎spec/unit/rack/params_spec.rb‎

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,14 @@
141141
ret=@params.retrieve_params(@env)
142142
ret['foo'].should == 'bar'
143143
end
144+
145+
it"handles empty input gracefully on JSON"do
146+
@env['CONTENT_TYPE']='application/json'
147+
@env['rack.input']=StringIO.new
148+
149+
ret=@params.retrieve_params(@env)
150+
ret.shouldbe_empty
151+
end
144152

145153
it"raises a BadRequestError on invalid JSON"do
146154
@env['CONTENT_TYPE']='application/json'
@@ -151,7 +159,6 @@
151159
lambda{@params.retrieve_params(@env)}.shouldraise_error(Goliath::Validation::BadRequestError)
152160
end
153161

154-
155162
it"doesn't parse unknown content types"do
156163
@env['CONTENT_TYPE']='fake/form -- type'
157164
@env['rack.input']=StringIO.new

0 commit comments

Comments
(0)