diff options
author | Christoph Wagner <wagner@webit.de> | 2018-10-23 13:58:47 +0200 |
---|---|---|
committer | Jeremy Evans <code@jeremyevans.net> | 2020-01-22 11:56:50 -0800 |
commit | 90708f6ef2c85b2c0cb2de8313201307bd33697c (patch) | |
tree | 715b6e64479474a87b2d115aff16a8d751de6e7e /test/spec_multipart.rb | |
parent | 8dad94973dd783fa2ab9246b4dcfcaeb3368061a (diff) | |
download | rack-90708f6ef2c85b2c0cb2de8313201307bd33697c.tar.gz |
Fix multipart parser for special files #1308
Diffstat (limited to 'test/spec_multipart.rb')
-rw-r--r-- | test/spec_multipart.rb | 26 |
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 |