| <!doctype html> | |
| <html> | |
| <head> | |
| <meta charset=utf-8> | |
| <title>Test cookie value parsing</title> | |
| <meta name=help href="https://tools.ietf.org/html/rfc6265#section-5.2"> | |
| <meta name="timeout" content="long"> | |
| <script src="/resources/testharness.js"></script> | |
| <script src="/resources/testharnessreport.js"></script> | |
| <script src="/resources/testdriver.js"></script> | |
| <script src="/resources/testdriver-vendor.js"></script> | |
| <script src="/cookies/resources/cookie-test.js"></script> | |
| </head> | |
| <body> | |
| <div id=log></div> | |
| <script> | |
| // TODO: there is more to test here, these tests capture the old | |
| // ported http-state tests. Feel free to delete this comment when more | |
| // are added, or these are split up into logical groups. | |
| const valueTests = [ | |
| { | |
| cookie: "test=1, baz=qux", | |
| expected: "test=1, baz=qux", | |
| name: "Set value containing a comma", | |
| }, | |
| { | |
| cookie: 'test="2, baz=qux"', | |
| expected: 'test="2, baz=qux"', | |
| name: "Set quoted value containing a comma", | |
| }, | |
| { | |
| cookie: 'test="3zz;pp" ; ;', | |
| expected: 'test="3zz', | |
| name: "Ignore values after semicolon", | |
| }, | |
| { | |
| cookie: 'test="4zz ;', | |
| expected: 'test="4zz', | |
| name: "Ignore whitespace at the end of value", | |
| }, | |
| { | |
| cookie: 'test="5zzz " "ppp" ;', | |
| expected: 'test="5zzz " "ppp"', | |
| name: "Set value including quotes and whitespace up until semicolon", | |
| }, | |
| { | |
| cookie: 'test=6A"B ;', | |
| expected: 'test=6A"B', | |
| name: "Set value with a single quote excluding whitespace" | |
| }, | |
| { | |
| cookie: "test7", | |
| expected: "test7", | |
| name: "Set nameless cookie to its value", | |
| }, | |
| { | |
| cookie: '"test8\"HHH"', | |
| expected: '"test8\"HHH"', | |
| name: "Set nameless cookie to its value with an escaped quote", | |
| }, | |
| { | |
| cookie: 'test="9', | |
| expected: 'test="9', | |
| name: "Set value with unbalanced leading quote", | |
| }, | |
| { | |
| cookie: "=test10", | |
| expected: "test10", | |
| name: "Set nameless cookie followed by '=' to its value", | |
| }, | |
| { | |
| // 4 + 2 + 4090 = 4096 | |
| cookie: `test=11${"a".repeat(4090)}`, | |
| expected: `test=11${"a".repeat(4090)}`, | |
| name: "Set cookie with large name + value ( = 4kb)", | |
| }, | |
| { | |
| // 4 + 2 + 4091 = 4097 | |
| cookie: `test=12${"a".repeat(4091)}`, | |
| expected: "", | |
| name: "Ignore cookie with large name + value ( > 4kb)", | |
| }, | |
| { | |
| cookie: `test=13\nZYX`, | |
| expected: "test=13", | |
| name: "Set cookie but ignore value after LF", | |
| }, | |
| { | |
| cookie: 'test="14 " ;', | |
| expected: 'test="14 "', | |
| name: "Set cookie ignoring whitespace after value endquote", | |
| }, | |
| { | |
| cookie: "test=15 ;", | |
| expected: "test=15", | |
| name: "Ignore whitespace and ; after value", | |
| }, | |
| { | |
| cookie: "test= 16", | |
| expected: "test=16", | |
| name: "Ignore whitespace preceding value", | |
| }, | |
| { | |
| cookie: 'test="17"', | |
| expected: 'test="17"', | |
| name: "Set cookie with quotes in value", | |
| }, | |
| { | |
| cookie: 'test=" 18 "', | |
| expected: 'test=" 18 "', | |
| name: "Set cookie keeping whitespace inside quoted value", | |
| }, | |
| { | |
| cookie: 'test="19;wow"', | |
| expected: 'test="19', | |
| name: "Set cookie value ignoring characters after semicolon", | |
| }, | |
| { | |
| cookie: 'test="20=20"', | |
| expected: 'test="20=20"', | |
| name: "Set cookie with another = inside quoted value", | |
| }, | |
| { | |
| cookie: "test = 21 ; ttt", | |
| expected: "test=21", | |
| name: "Set cookie ignoring whitespace surrounding value and characters after first semicolon", | |
| }, | |
| { | |
| cookie: ["testA=22", "test22=", "testB=22"], | |
| expected: "testA=22; test22=; testB=22", | |
| name: "Set valueless cookie, given `Set-Cookie: test22=`", | |
| }, | |
| { | |
| cookie: "test=%32%33", | |
| expected: "test=%32%33", | |
| name: "URL-encoded cookie value is not decoded", | |
| }, | |
| { | |
| cookie: "test24==", | |
| expected: "test24==", | |
| name: "Set cookie with value set to =", | |
| }, | |
| { | |
| cookie: 'test=25=25', | |
| expected: 'test=25=25', | |
| name: "Set cookie with one = inside an unquoted value", | |
| }, | |
| { | |
| cookie: 'test=26=26=26', | |
| expected: 'test=26=26=26', | |
| name: "Set cookie with two = inside an unquoted value", | |
| }, | |
| { | |
| cookie: 'test=27 test', | |
| expected: 'test=27 test', | |
| name: "Set cookie with a space character in the value", | |
| }, | |
| { | |
| cookie: ' test test28 ;', | |
| expected: 'test test28', | |
| name: "Set a nameless cookie with a space character in the value", | |
| }, | |
| ]; | |
| for (const test of valueTests) { | |
| httpCookieTest(test.cookie, test.expected, test.name, test.defaultPath); | |
| } | |
| </script> | |
| </body> | |
| </html> |