Skip to content

Commit

Permalink
Ensure there is no new line character in header value
Browse files Browse the repository at this point in the history
  • Loading branch information
Piotr Boniecki committed Feb 12, 2019
1 parent e716108 commit 3b99add
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 0 deletions.
10 changes: 10 additions & 0 deletions lib/http/headers.rb
Expand Up @@ -50,6 +50,7 @@ def delete(name)
# @return [void]
def add(name, value)
name = normalize_header name.to_s
validate_value(value)
Array(value).each { |v| @pile << [name, v.to_s] }
end

Expand Down Expand Up @@ -209,5 +210,14 @@ def normalize_header(name)

raise HeaderError, "Invalid HTTP header field name: #{name.inspect}"
end

# Ensures there is no new line character in the header value
#
# @param [String] value
# @raise [HeaderError] if value includes new line character
def validate_value(value)
return unless value && value.include?("\n")
raise HeaderError, "Invalid HTTP header field value: #{value.inspect}"
end
end
end
10 changes: 10 additions & 0 deletions spec/lib/http/headers_spec.rb
Expand Up @@ -41,6 +41,11 @@
to raise_error HTTP::HeaderError
end
end

it "fails with invalid header value" do
expect { headers.set "foo", "bar\nEvil-Header: evil-value" }.
to raise_error HTTP::HeaderError
end
end

describe "#[]=" do
Expand Down Expand Up @@ -127,6 +132,11 @@
to raise_error HTTP::HeaderError
end
end

it "fails with invalid header value" do
expect { headers.add "foo", "bar\nEvil-Header: evil-value" }.
to raise_error HTTP::HeaderError
end
end

describe "#get" do
Expand Down

0 comments on commit 3b99add

Please sign in to comment.