diff options
author | James Tucker <jftucker@gmail.com> | 2016-01-24 19:15:48 -0800 |
---|---|---|
committer | James Tucker <jftucker@gmail.com> | 2016-01-24 19:15:48 -0800 |
commit | f175063082b0da93d87b3ce94369851073e28466 (patch) | |
tree | 3a63dd73dc9e202c2a90abbeb6ee099b76fe8c63 | |
parent | 45acf493f153bac95fa486bc5a8633baaa9e49e4 (diff) | |
parent | ff0cac57254dd1d4799a673c9393acb016b136c3 (diff) | |
download | rack-f175063082b0da93d87b3ce94369851073e28466.tar.gz |
Merge pull request #1003 from rack/unity3d_multipart_bug
Strip quotes from around multipart encodings
-rw-r--r-- | lib/rack/multipart/parser.rb | 1 | ||||
-rw-r--r-- | test/multipart/unity3d_wwwform | 11 | ||||
-rw-r--r-- | test/spec_multipart.rb | 7 |
3 files changed, 19 insertions, 0 deletions
diff --git a/lib/rack/multipart/parser.rb b/lib/rack/multipart/parser.rb index fe3381b9..2ea9cd80 100644 --- a/lib/rack/multipart/parser.rb +++ b/lib/rack/multipart/parser.rb @@ -347,6 +347,7 @@ module Rack k,v = param.split('=', 2) k.strip! v.strip! + v = v[1..-2] if v[0] == '"' && v[-1] == '"' encoding = Encoding.find v if k == CHARSET end end diff --git a/test/multipart/unity3d_wwwform b/test/multipart/unity3d_wwwform new file mode 100644 index 00000000..1089a690 --- /dev/null +++ b/test/multipart/unity3d_wwwform @@ -0,0 +1,11 @@ +--AaB03x
+Content-Type: text/plain; charset="utf-8"
+Content-disposition: form-data; name="user_sid"
+
+bbf14f82-d2aa-4c07-9fb8-ca6714a7ea97
+--AaB03x
+Content-Type: image/png; charset=UTF-8
+Content-disposition: form-data; name="file";
+filename="b67879ed-bfed-4491-a8cc-f99cca769f94.png"
+
+--AaB03x
diff --git a/test/spec_multipart.rb b/test/spec_multipart.rb index 9e8a6140..3a9f7b35 100644 --- a/test/spec_multipart.rb +++ b/test/spec_multipart.rb @@ -72,6 +72,13 @@ describe Rack::Multipart do end end + it "handles quoted encodings" do + # See #905 + env = Rack::MockRequest.env_for("/", multipart_fixture(:unity3d_wwwform)) + params = Rack::Multipart.parse_multipart(env) + params['user_sid'].encoding.must_equal Encoding::UTF_8 + end + it "raise RangeError if the key space is exhausted" do env = Rack::MockRequest.env_for("/", multipart_fixture(:content_type_and_no_filename)) |