Skip to content

Commit 55dbcd6

Browse files
jstanley0ccutrer
authored andcommitted
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>
1 parent 2448e6c commit 55dbcd6

3 files changed

Lines changed: 97 additions & 0 deletions

File tree

config/initializers/rack.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
#encoding:ASCII-8BIT
2+
13
Rack::Utils.key_space_limit = 128.kilobytes # default is 64KB
24

35
if CANVAS_RAILS2

spec/fixtures/multipart-request

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
------WebKitFormBoundary2raDSu0SsqTAphBU
2+
Content-Disposition: form-data; name="reply_count_tooltip[other]"
3+
4+
%{count} replies
5+
------WebKitFormBoundary2raDSu0SsqTAphBU
6+
Content-Disposition: form-data; name="reply_count_tooltip[one]"
7+
8+
1 reply
9+
------WebKitFormBoundary2raDSu0SsqTAphBU
10+
Content-Disposition: form-data; name="reply_count_tooltip[zero]"
11+
12+
No replies
13+
------WebKitFormBoundary2raDSu0SsqTAphBU
14+
Content-Disposition: form-data; name="unread_count_tooltip[other]"
15+
16+
%{count} unread replies
17+
------WebKitFormBoundary2raDSu0SsqTAphBU
18+
Content-Disposition: form-data; name="unread_count_tooltip[one]"
19+
20+
1 unread reply
21+
------WebKitFormBoundary2raDSu0SsqTAphBU
22+
Content-Disposition: form-data; name="unread_count_tooltip[zero]"
23+
24+
No unread replies
25+
------WebKitFormBoundary2raDSu0SsqTAphBU
26+
Content-Disposition: form-data; name="summary"
27+
28+
blah
29+
------WebKitFormBoundary2raDSu0SsqTAphBU
30+
Content-Disposition: form-data; name="threaded"
31+
32+
0
33+
------WebKitFormBoundary2raDSu0SsqTAphBU
34+
Content-Disposition: form-data; name="attachment"; filename="test.txt"
35+
Content-Type: text/plain
36+
37+
blah blah bláh <- non-ascii is important here :P
38+
------WebKitFormBoundary2raDSu0SsqTAphBU
39+
Content-Disposition: form-data; name="message"
40+
41+
<p>blah</p>
42+
------WebKitFormBoundary2raDSu0SsqTAphBU
43+
Content-Disposition: form-data; name="title"
44+
45+
test thing
46+
------WebKitFormBoundary2raDSu0SsqTAphBU
47+
Content-Disposition: form-data; name="set_assignment"
48+
49+
false
50+
------WebKitFormBoundary2raDSu0SsqTAphBU
51+
Content-Disposition: form-data; name="user_can_see_posts"
52+
53+
true
54+
------WebKitFormBoundary2raDSu0SsqTAphBU
55+
Content-Disposition: form-data; name="subscribed"
56+
57+
false
58+
------WebKitFormBoundary2raDSu0SsqTAphBU
59+
Content-Disposition: form-data; name="require_initial_post"
60+
61+
0
62+
------WebKitFormBoundary2raDSu0SsqTAphBU
63+
Content-Disposition: form-data; name="podcast_has_student_posts"
64+
65+
false
66+
------WebKitFormBoundary2raDSu0SsqTAphBU
67+
Content-Disposition: form-data; name="podcast_enabled"
68+
69+
0
70+
------WebKitFormBoundary2raDSu0SsqTAphBU
71+
Content-Disposition: form-data; name="discussion_type"
72+
73+
side_comment
74+
------WebKitFormBoundary2raDSu0SsqTAphBU
75+
Content-Disposition: form-data; name="is_announcement"
76+
77+
false
78+
------WebKitFormBoundary2raDSu0SsqTAphBU
79+
Content-Disposition: form-data; name="_method"
80+
81+
POST
82+
------WebKitFormBoundary2raDSu0SsqTAphBU
83+
Content-Disposition: form-data; name="authenticity_token"
84+
85+
11PqRxNnjVRnG6zc6m5aLh+t/ahMI9V1KSGKPprHfibFmldZQPsmhZhPK1vDoc3h1nK0F1XcqSlvRBwHDHXsxQ==
86+
------WebKitFormBoundary2raDSu0SsqTAphBU--

spec/initializers/rack_spec.rb

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,5 +28,14 @@
2828
params["file"][:filename].should eql "filename.frd"
2929
params["file"][:tempfile].read.should eql "this one really is a file"
3030
end
31+
32+
it "should not explode with a non-ASCII file attachment" do
33+
request_file = File.open( File.expand_path('../fixtures/multipart-request', File.dirname(__FILE__)) )
34+
env = { 'CONTENT_TYPE' => 'multipart/form-data; boundary=----WebKitFormBoundary2raDSu0SsqTAphBU',
35+
'CONTENT_LENGTH' => request_file.size,
36+
'rack.input' => request_file
37+
}
38+
lambda { Rack::Utils::Multipart.parse_multipart(env) }.should_not raise_error
39+
end
3140
end
3241
end

0 commit comments

Comments
 (0)