summary refs log tree commit
diff options
context:
space:
mode:
authorJames Tucker <jftucker@gmail.com>2016-01-24 19:15:48 -0800
committerJames Tucker <jftucker@gmail.com>2016-01-24 19:15:48 -0800
commitf175063082b0da93d87b3ce94369851073e28466 (patch)
tree3a63dd73dc9e202c2a90abbeb6ee099b76fe8c63
parent45acf493f153bac95fa486bc5a8633baaa9e49e4 (diff)
parentff0cac57254dd1d4799a673c9393acb016b136c3 (diff)
downloadrack-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.rb1
-rw-r--r--test/multipart/unity3d_wwwform11
-rw-r--r--test/spec_multipart.rb7
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))