aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/lib/action_controller/session
diff options
context:
space:
mode:
authorTomK32 <tomk32@tomk32.de>2008-05-16 11:13:32 +0200
committerTomK32 <tomk32@tomk32.de>2008-05-16 11:13:32 +0200
commitfa0cca368f74119b561595cc6ca7454f7debdf6b (patch)
tree85022a5047c4d8da55a981cc3c1b8cc65f1adcd8 /actionpack/lib/action_controller/session
parentf16c22040d5b66cb285fbd9a90858294376192bb (diff)
parent4e2bc02163aa646ab1304b1b5bec98a7af8927f5 (diff)
downloadrails-fa0cca368f74119b561595cc6ca7454f7debdf6b.tar.gz
rails-fa0cca368f74119b561595cc6ca7454f7debdf6b.tar.bz2
rails-fa0cca368f74119b561595cc6ca7454f7debdf6b.zip
Merge branch 'master' of git@github.com:lifo/docrails
Diffstat (limited to 'actionpack/lib/action_controller/session')
-rw-r--r--actionpack/lib/action_controller/session/cookie_store.rb9
1 files changed, 6 insertions, 3 deletions
diff --git a/actionpack/lib/action_controller/session/cookie_store.rb b/actionpack/lib/action_controller/session/cookie_store.rb
index 560491f996..ada1862c3e 100644
--- a/actionpack/lib/action_controller/session/cookie_store.rb
+++ b/actionpack/lib/action_controller/session/cookie_store.rb
@@ -130,17 +130,20 @@ class CGI::Session::CookieStore
# Marshal a session hash into safe cookie data. Include an integrity hash.
def marshal(session)
data = ActiveSupport::Base64.encode64(Marshal.dump(session)).chop
- CGI.escape "#{data}--#{generate_digest(data)}"
+ "#{data}--#{generate_digest(data)}"
end
# Unmarshal cookie data to a hash and verify its integrity.
def unmarshal(cookie)
if cookie
- data, digest = CGI.unescape(cookie).split('--')
- unless digest == generate_digest(data)
+ data, digest = cookie.split('--')
+
+ # Do two checks to transparently support old double-escaped data.
+ unless digest == generate_digest(data) || digest == generate_digest(data = CGI.unescape(data))
delete
raise TamperedWithCookie
end
+
Marshal.load(ActiveSupport::Base64.decode64(data))
end
end