diff options
| author | TomK32 <tomk32@tomk32.de> | 2008-05-16 11:13:32 +0200 |
|---|---|---|
| committer | TomK32 <tomk32@tomk32.de> | 2008-05-16 11:13:32 +0200 |
| commit | fa0cca368f74119b561595cc6ca7454f7debdf6b (patch) | |
| tree | 85022a5047c4d8da55a981cc3c1b8cc65f1adcd8 /actionpack/lib/action_controller/session | |
| parent | f16c22040d5b66cb285fbd9a90858294376192bb (diff) | |
| parent | 4e2bc02163aa646ab1304b1b5bec98a7af8927f5 (diff) | |
| download | rails-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.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 |
