[前][次][番号順一覧][スレッド一覧]

ruby-changes:20127

From: nahi <ko1@a...>
Date: Mon, 20 Jun 2011 15:48:52 +0900 (JST)
Subject: [ruby-changes:20127] nahi:r32175 (trunk): * lib/webrick/cookie.rb (WEBrick::Cookie.parse): Revert r31228.

nahi	2011-06-20 15:48:40 +0900 (Mon, 20 Jun 2011)

  New Revision: 32175

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=32175

  Log:
    * lib/webrick/cookie.rb (WEBrick::Cookie.parse): Revert r31228.  
      r31228 was for allowing the 'Cookie:' header which did not have no 
      SP after ';' for separating cookie-pairs but RFC6265 requires single 
      SP after ';' there.  We allow multiple SPs here for compatibility 
      with older WEBrick version.
    
    * test/webrick/test_cookie.rb: Test it.

  Modified files:
    trunk/ChangeLog
    trunk/lib/webrick/cookie.rb
    trunk/test/webrick/test_cookie.rb

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 32174)
+++ ChangeLog	(revision 32175)
@@ -1,3 +1,13 @@
+Mon Jun 20 15:41:33 2011  Hiroshi Nakamura  <nahi@r...>
+
+	* lib/webrick/cookie.rb (WEBrick::Cookie.parse): Revert r31228.
+	  r31228 was for allowing the 'Cookie:' header which did not have no
+	  SP after ';' for separating cookie-pairs but RFC6265 requires single
+	  SP after ';' there.  We allow multiple SPs here for compatibility
+	  with older WEBrick version.
+
+	* test/webrick/test_cookie.rb: Test it.
+
 Sun Jun 19 13:31:26 2011  Shota Fukumori  <sorah@t...>
 
 	* NEWS: Introduce --hide-skip on test/unit.
Index: lib/webrick/cookie.rb
===================================================================
--- lib/webrick/cookie.rb	(revision 32174)
+++ lib/webrick/cookie.rb	(revision 32175)
@@ -57,7 +57,7 @@
         ret = []
         cookie = nil
         ver = 0
-        str.split(/[;,]\s*/).each{|x|
+        str.split(/[;,]\s+/).each{|x|
           key, val = x.split(/=/,2)
           val = val ? HTTPUtils::dequote(val) : ""
           case key
Index: test/webrick/test_cookie.rb
===================================================================
--- test/webrick/test_cookie.rb	(revision 32174)
+++ test/webrick/test_cookie.rb	(revision 32175)
@@ -34,6 +34,7 @@
     data << 'Part_Number="Rocket_Launcher_0001"; $Path="/acme"; '
     data << 'Shipping="FedEx"; $Path="/acme"'
     cookies = WEBrick::Cookie.parse(data)
+    assert_equal(3, cookies.size)
     assert_equal(1, cookies[0].version)
     assert_equal("Customer", cookies[0].name)
     assert_equal("WILE_E_COYOTE", cookies[0].value)
@@ -54,26 +55,32 @@
     assert_equal("9865ecfd514be7f7", cookies[1].value)
   end
 
-  def test_parse_non_whitespace
+  def test_parse_no_whitespace
     data = [
-      '$Version="1";',
-      'Customer="WILE_E_COYOTE";$Path="/acme";',
-      'Part_Number="Rocket_Launcher_0001";$Path="/acme";',
+      '$Version="1"; ',
+      'Customer="WILE_E_COYOTE";$Path="/acme";', # no SP between cookie-string
+      'Part_Number="Rocket_Launcher_0001";$Path="/acme";', # no SP between cookie-string
       'Shipping="FedEx";$Path="/acme"'
     ].join
     cookies = WEBrick::Cookie.parse(data)
-    assert_equal(1, cookies[0].version)
-    assert_equal("Customer", cookies[0].name)
-    assert_equal("WILE_E_COYOTE", cookies[0].value)
-    assert_equal("/acme", cookies[0].path)
-    assert_equal(1, cookies[1].version)
-    assert_equal("Part_Number", cookies[1].name)
-    assert_equal("Rocket_Launcher_0001", cookies[1].value)
-    assert_equal(1, cookies[2].version)
-    assert_equal("Shipping", cookies[2].name)
-    assert_equal("FedEx", cookies[2].value)
+    assert_equal(1, cookies.size)
   end
 
+  def test_parse_too_much_whitespaces
+    # According to RFC6265,
+    #   cookie-string = cookie-pair *( ";" SP cookie-pair )
+    # So single 0x20 is needed after ';'. We allow multiple spaces here for
+    # compatibility with older WEBrick versions.
+    data = [
+      '$Version="1"; ',
+      'Customer="WILE_E_COYOTE";$Path="/acme";     ', # no SP between cookie-string
+      'Part_Number="Rocket_Launcher_0001";$Path="/acme";     ', # no SP between cookie-string
+      'Shipping="FedEx";$Path="/acme"'
+    ].join
+    cookies = WEBrick::Cookie.parse(data)
+    assert_equal(3, cookies.size)
+  end
+
   def test_parse_set_cookie
     data = %(Customer="WILE_E_COYOTE"; Version="1"; Path="/acme")
     cookie = WEBrick::Cookie.parse_set_cookie(data)

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]