summaryrefslogtreecommitdiff
path: root/test/spec_multipart.rb
diff options
context:
space:
mode:
authorChristoph Wagner <wagner@webit.de>2018-10-23 13:58:47 +0200
committerJeremy Evans <code@jeremyevans.net>2020-01-22 11:56:50 -0800
commit90708f6ef2c85b2c0cb2de8313201307bd33697c (patch)
tree715b6e64479474a87b2d115aff16a8d751de6e7e /test/spec_multipart.rb
parent8dad94973dd783fa2ab9246b4dcfcaeb3368061a (diff)
downloadrack-90708f6ef2c85b2c0cb2de8313201307bd33697c.tar.gz
Fix multipart parser for special files #1308
Diffstat (limited to 'test/spec_multipart.rb')
-rw-r--r--test/spec_multipart.rb26
1 files changed, 26 insertions, 0 deletions
diff --git a/test/spec_multipart.rb b/test/spec_multipart.rb
index ae7e643e..946e52c3 100644
--- a/test/spec_multipart.rb
+++ b/test/spec_multipart.rb
@@ -6,6 +6,7 @@ require 'rack/multipart'
require 'rack/multipart/parser'
require 'rack/utils'
require 'rack/mock'
+require 'timeout'
describe Rack::Multipart do
def multipart_fixture(name, boundary = "AaB03x")
@@ -152,6 +153,31 @@ describe Rack::Multipart do
wr.close
end
+ # see https://github.com/rack/rack/pull/1309
+ it "parse strange multipart pdf" do
+ boundary = '---------------------------932620571087722842402766118'
+
+ data = StringIO.new
+ data.write("--#{boundary}")
+ data.write("\r\n")
+ data.write('Content-Disposition: form-data; name="a"; filename="a.pdf"')
+ data.write("\r\n")
+ data.write("Content-Type:application/pdf\r\n")
+ data.write("\r\n")
+ data.write("-" * (1024 * 1024))
+ data.write("\r\n")
+ data.write("--#{boundary}--\r\n")
+
+ fixture = {
+ "CONTENT_TYPE" => "multipart/form-data; boundary=#{boundary}",
+ "CONTENT_LENGTH" => data.length.to_s,
+ :input => data,
+ }
+
+ env = Rack::MockRequest.env_for '/', fixture
+ Timeout::timeout(10) { Rack::Multipart.parse_multipart(env) }
+ end
+
it 'raises an EOF error on content-length mistmatch' do
env = Rack::MockRequest.env_for("/", multipart_fixture(:empty))
env['rack.input'] = StringIO.new