summary refs log tree commit
diff options
context:
space:
mode:
authorSamuel Williams <samuel.williams@oriontransfer.co.nz>2022-04-27 14:50:44 +1200
committerGitHub <noreply@github.com>2022-04-26 19:50:44 -0700
commit504f1d56e60613d3d43c4271ebab8fff2d35a157 (patch)
tree65c44787e7503fedd9bcc400b3012e0f721d9b74
parent11b4ac5237b25ba773ca519cc4e508c9008bed65 (diff)
downloadrack-504f1d56e60613d3d43c4271ebab8fff2d35a157.tar.gz
Don't overwrite other cookie attributes when building deletion cookie. (#1846)
-rw-r--r--lib/rack/utils.rb6
-rw-r--r--test/spec_utils.rb28
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