Skip to content

Commit

Permalink
prevent crash when session cookie value does not contain "--" delimiter
Browse files Browse the repository at this point in the history
  • Loading branch information
Yun Huang Yong committed Jan 16, 2012
1 parent 6cb96fe commit 881ce76
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 3 deletions.
6 changes: 4 additions & 2 deletions lib/rack/session/cookie.rb
Expand Up @@ -106,8 +106,10 @@ def unpacked_cookie_data(env)
if @secrets.size > 0 && session_data
session_data, digest = session_data.split("--")

ok = @secrets.any? do |secret|
secret && digest == generate_hmac(session_data, secret)
if session_data && digest
ok = @secrets.any? do |secret|
secret && digest == generate_hmac(session_data, secret)
end
end

session_data = nil unless ok
Expand Down
6 changes: 5 additions & 1 deletion test/spec_session_cookie.rb
Expand Up @@ -123,6 +123,10 @@ def decode(str); @calls << :decode; str; end
res = Rack::MockRequest.new(Rack::Session::Cookie.new(incrementor)).
get("/", "HTTP_COOKIE" => "rack.session=blarghfasel")
res.body.should.equal '{"counter"=>1}'

app = Rack::Session::Cookie.new(incrementor, :secret => 'test')
res = Rack::MockRequest.new(app).get("/", "HTTP_COOKIE" => "rack.session=")
res.body.should.equal '{"counter"=>1}'
end

bigcookie = lambda do |env|
Expand Down Expand Up @@ -176,7 +180,7 @@ def decode(str); @calls << :decode; str; end
response2 = Rack::MockRequest.new(app).get("/", "HTTP_COOKIE" =>
tampered_with_cookie)

# Tampared cookie was ignored. Counter is back to 1.
# Tampered cookie was ignored. Counter is back to 1.
response2.body.should.equal '{"counter"=>1}'
end

Expand Down

0 comments on commit 881ce76

Please sign in to comment.