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/