Skip to content

Commit 90b1f8b

Browse files
author
Piotr Boniecki
committed
Ensure there is no new line character in header value
1 parent a90f89e commit 90b1f8b

File tree

2 files changed

+22
-1
lines changed

2 files changed

+22
-1
lines changed

lib/http/headers.rb

+12-1
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ def delete(name)
5050
# @return [void]
5151
def add(name, value)
5252
name = normalize_header name.to_s
53-
Array(value).each { |v| @pile << [name, v.to_s] }
53+
Array(value).each { |v| @pile << [name, validate_value(v)] }
5454
end
5555

5656
# Returns list of header values if any.
@@ -209,5 +209,16 @@ def normalize_header(name)
209209

210210
raise HeaderError, "Invalid HTTP header field name: #{name.inspect}"
211211
end
212+
213+
# Ensures there is no new line character in the header value
214+
#
215+
# @param [String] value
216+
# @raise [HeaderError] if value includes new line character
217+
# @return [String] stringified header value
218+
def validate_value(value)
219+
v = value.to_s
220+
return v unless v.include?("\n")
221+
raise HeaderError, "Invalid HTTP header field value: #{v.inspect}"
222+
end
212223
end
213224
end

spec/lib/http/headers_spec.rb

+10
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,11 @@
4141
to raise_error HTTP::HeaderError
4242
end
4343
end
44+
45+
it "fails with invalid header value" do
46+
expect { headers.set "foo", "bar\nEvil-Header: evil-value" }.
47+
to raise_error HTTP::HeaderError
48+
end
4449
end
4550

4651
describe "#[]=" do
@@ -127,6 +132,11 @@
127132
to raise_error HTTP::HeaderError
128133
end
129134
end
135+
136+
it "fails with invalid header value" do
137+
expect { headers.add "foo", "bar\nEvil-Header: evil-value" }.
138+
to raise_error HTTP::HeaderError
139+
end
130140
end
131141

132142
describe "#get" do

0 commit comments

Comments
 (0)