fix "invalid byte sequence in US-ASCII" in topic attachment

test plan:
 - create a new discussion
 - attach a non-ASCII file
 - save the discussion
 - it shouldn't explode

Change-Id: I9ada9dbf2bf25e63baab22f6117171436d4808c6
Reviewed-on: https://gerrit.instructure.com/27832
Tested-by: Jenkins <jenkins@instructure.com>
QA-Review: Matt Fairbourn <mfairbourn@instructure.com>
Reviewed-by: Bracken Mosbacker <bracken@instructure.com>
Product-Review: Bracken Mosbacker <bracken@instructure.com>
This commit is contained in:
Jeremy Stanley 2013-12-20 18:20:43 -07:00
parent 2b93148869
commit 6d22b1f738
3 changed files with 97 additions and 0 deletions

View File

@ -1,3 +1,5 @@
#encoding:ASCII-8BIT
Rack::Utils.key_space_limit = 128.kilobytes # default is 64KB
if CANVAS_RAILS2

86
spec/fixtures/multipart-request vendored Normal file
View File

@ -0,0 +1,86 @@
------WebKitFormBoundary2raDSu0SsqTAphBU
Content-Disposition: form-data; name="reply_count_tooltip[other]"
%{count} replies
------WebKitFormBoundary2raDSu0SsqTAphBU
Content-Disposition: form-data; name="reply_count_tooltip[one]"
1 reply
------WebKitFormBoundary2raDSu0SsqTAphBU
Content-Disposition: form-data; name="reply_count_tooltip[zero]"
No replies
------WebKitFormBoundary2raDSu0SsqTAphBU
Content-Disposition: form-data; name="unread_count_tooltip[other]"
%{count} unread replies
------WebKitFormBoundary2raDSu0SsqTAphBU
Content-Disposition: form-data; name="unread_count_tooltip[one]"
1 unread reply
------WebKitFormBoundary2raDSu0SsqTAphBU
Content-Disposition: form-data; name="unread_count_tooltip[zero]"
No unread replies
------WebKitFormBoundary2raDSu0SsqTAphBU
Content-Disposition: form-data; name="summary"
blah
------WebKitFormBoundary2raDSu0SsqTAphBU
Content-Disposition: form-data; name="threaded"
0
------WebKitFormBoundary2raDSu0SsqTAphBU
Content-Disposition: form-data; name="attachment"; filename="test.txt"
Content-Type: text/plain
blah blah bláh <- non-ascii is important here :P
------WebKitFormBoundary2raDSu0SsqTAphBU
Content-Disposition: form-data; name="message"
<p>blah</p>
------WebKitFormBoundary2raDSu0SsqTAphBU
Content-Disposition: form-data; name="title"
test thing
------WebKitFormBoundary2raDSu0SsqTAphBU
Content-Disposition: form-data; name="set_assignment"
false
------WebKitFormBoundary2raDSu0SsqTAphBU
Content-Disposition: form-data; name="user_can_see_posts"
true
------WebKitFormBoundary2raDSu0SsqTAphBU
Content-Disposition: form-data; name="subscribed"
false
------WebKitFormBoundary2raDSu0SsqTAphBU
Content-Disposition: form-data; name="require_initial_post"
0
------WebKitFormBoundary2raDSu0SsqTAphBU
Content-Disposition: form-data; name="podcast_has_student_posts"
false
------WebKitFormBoundary2raDSu0SsqTAphBU
Content-Disposition: form-data; name="podcast_enabled"
0
------WebKitFormBoundary2raDSu0SsqTAphBU
Content-Disposition: form-data; name="discussion_type"
side_comment
------WebKitFormBoundary2raDSu0SsqTAphBU
Content-Disposition: form-data; name="is_announcement"
false
------WebKitFormBoundary2raDSu0SsqTAphBU
Content-Disposition: form-data; name="_method"
POST
------WebKitFormBoundary2raDSu0SsqTAphBU
Content-Disposition: form-data; name="authenticity_token"
11PqRxNnjVRnG6zc6m5aLh+t/ahMI9V1KSGKPprHfibFmldZQPsmhZhPK1vDoc3h1nK0F1XcqSlvRBwHDHXsxQ==
------WebKitFormBoundary2raDSu0SsqTAphBU--

View File

@ -28,5 +28,14 @@ this one really is a file
params["file"][:filename].should eql "filename.frd"
params["file"][:tempfile].read.should eql "this one really is a file"
end
it "should not explode with a non-ASCII file attachment" do
request_file = File.open( File.expand_path('../fixtures/multipart-request', File.dirname(__FILE__)) )
env = { 'CONTENT_TYPE' => 'multipart/form-data; boundary=----WebKitFormBoundary2raDSu0SsqTAphBU',
'CONTENT_LENGTH' => request_file.size,
'rack.input' => request_file
}
lambda { Rack::Utils::Multipart.parse_multipart(env) }.should_not raise_error
end
end
end