diff options
author | Samuel Williams <samuel.williams@oriontransfer.co.nz> | 2022-04-27 14:50:44 +1200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-04-26 19:50:44 -0700 |
commit | 504f1d56e60613d3d43c4271ebab8fff2d35a157 (patch) | |
tree | 65c44787e7503fedd9bcc400b3012e0f721d9b74 | |
parent | 11b4ac5237b25ba773ca519cc4e508c9008bed65 (diff) | |
download | rack-504f1d56e60613d3d43c4271ebab8fff2d35a157.tar.gz |
Don't overwrite other cookie attributes when building deletion cookie. (#1846)
-rw-r--r-- | lib/rack/utils.rb | 6 | ||||
-rw-r--r-- | test/spec_utils.rb | 28 |
2 files changed, 27 insertions, 7 deletions
diff --git a/lib/rack/utils.rb b/lib/rack/utils.rb index 4dc56d49..825ec45e 100644 --- a/lib/rack/utils.rb +++ b/lib/rack/utils.rb @@ -360,11 +360,7 @@ module Rack # # => "myname=; max-age=0; expires=Thu, 01 Jan 1970 00:00:00 GMT" # def delete_set_cookie_header(key, value = {}) - set_cookie_header(key, { - value: '', path: nil, domain: nil, - max_age: '0', - expires: Time.at(0) - }.merge(value)) + set_cookie_header(key, value.merge(max_age: '0', expires: Time.at(0), value: '')) end def make_delete_cookie_header(header, key, value) diff --git a/test/spec_utils.rb b/test/spec_utils.rb index 3f50be7a..286f2eb1 100644 --- a/test/spec_utils.rb +++ b/test/spec_utils.rb @@ -648,9 +648,33 @@ describe Rack::Utils, "cookies" do header = [] Rack::Utils.delete_set_cookie_header!(header, 'name2') - header.must_equal ["name2=; max-age=0; expires=Thu, 01 Jan 1970 00:00:00 GMT"] + header.must_equal [ + "name2=; max-age=0; expires=Thu, 01 Jan 1970 00:00:00 GMT" + ] + Rack::Utils.delete_set_cookie_header!(header, 'name') - header.must_equal ["name2=; max-age=0; expires=Thu, 01 Jan 1970 00:00:00 GMT", "name=; max-age=0; expires=Thu, 01 Jan 1970 00:00:00 GMT"] + header.must_equal [ + "name2=; max-age=0; expires=Thu, 01 Jan 1970 00:00:00 GMT", + "name=; max-age=0; expires=Thu, 01 Jan 1970 00:00:00 GMT" + ] + end + + it "deletes cookies in header field with domain" do + header = [] + + Rack::Utils.delete_set_cookie_header!(header, 'name', {domain: "mydomain.com"}) + header.must_equal [ + "name=; domain=mydomain.com; max-age=0; expires=Thu, 01 Jan 1970 00:00:00 GMT" + ] + end + + it "deletes cookies in header field with path" do + header = [] + + Rack::Utils.delete_set_cookie_header!(header, 'name', {path: "/a/b"}) + header.must_equal [ + "name=; path=/a/b; max-age=0; expires=Thu, 01 Jan 1970 00:00:00 GMT" + ] end it "sets and deletes cookies in header hash" do |