diff options
author | Pratik Naik <pratiknaik@gmail.com> | 2008-05-15 21:54:46 +0100 |
---|---|---|
committer | Pratik Naik <pratiknaik@gmail.com> | 2008-05-15 21:54:46 +0100 |
commit | 879493c35fd8d9e12e5cf3e56cd67ff07c3345c5 (patch) | |
tree | 9615859e1d9a52f71da444b0b7359817bb6acc50 /actionpack/lib/action_controller/session | |
parent | d6ecce66f4e125531875006eea8022b73fe135b5 (diff) | |
parent | fc02eabf296d6edb74a95174c7322293a54c9492 (diff) | |
download | rails-879493c35fd8d9e12e5cf3e56cd67ff07c3345c5.tar.gz rails-879493c35fd8d9e12e5cf3e56cd67ff07c3345c5.tar.bz2 rails-879493c35fd8d9e12e5cf3e56cd67ff07c3345c5.zip |
Merge commit 'mainstream/master'
Conflicts:
actionmailer/lib/action_mailer/base.rb
Diffstat (limited to 'actionpack/lib/action_controller/session')
-rw-r--r-- | actionpack/lib/action_controller/session/cookie_store.rb | 9 |
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 |