research by Ivan Nikulin
(email: ifaaan@gmail.com, github: inikulin,
twitter: _inikulin_)
This table lists RFC 6265 compliance issues found in modern browsers. Data was obtained by running the IETF test suite across major browsers using a specially made test runner. Test fails are divided into categories for the working group to distinguish implementation bugs from de facto standards that should make their way to the specification.
IETF test(71) | Expected | Safari(v9.0.0) 45 : 26 | IE(v11.0.0) 38 : 33 | Edge(v12.10240.0) 38 : 33 | IE (Codepage: big5)(v11.0.0) 38 : 33 | Edge (Codepage: big5)(v13.10586.0) 38 : 33 | IE (Codepage: shift_jis)(v11.0.0) 38 : 33 | Edge (Codepage: shift_jis)(v13.10586.0) 38 : 33 | Chrome(v49.0.2623) 24 : 47 | Firefox(v44.0.0) 21 : 50 |
---|---|---|---|---|---|---|---|---|---|---|
IETF test(71) | Expected | Safari(v9.0.0) 45 : 26 | IE(v11.0.0) 38 : 33 | Edge(v12.10240.0) 38 : 33 | IE (Codepage: big5)(v11.0.0) 38 : 33 | Edge (Codepage: big5)(v13.10586.0) 38 : 33 | IE (Codepage: shift_jis)(v11.0.0) 38 : 33 | Edge (Codepage: shift_jis)(v13.10586.0) 38 : 33 | Chrome(v49.0.2623) 24 : 47 | Firefox(v44.0.0) 21 : 50 |
0004# All / no consensus (9 : 0) Set cookie: "foo" | "" | "foo=" | "foo" | "foo" | "foo" | "foo" | "foo" | "foo" | "foo" | "foo" |
0027# All / no consensus (9 : 0) Set cookie: "foo" "bar" | "" | "bar=; foo=" | "bar" | "bar" | "bar" | "bar" | "bar" | "bar" | "bar" | "bar" |
MOZILLA0012# All / no consensus (9 : 0) Set cookie: "test=\"fubar! = foo;bar\\\";\" parser; max-age=6" "five; max-age=2.63," | "test=\"fubar! = foo" | "test=\"fubar! = foo;bar\\\"" | "test=\"fubar! = foo; five" | "test=\"fubar! = foo; five" | "test=\"fubar! = foo; five" | "test=\"fubar! = foo; five" | "test=\"fubar! = foo; five" | "test=\"fubar! = foo; five" | "test=\"fubar! = foo; five" | "test=\"fubar! = foo; five" |
MOZILLA0014# All / no consensus (9 : 0) Set cookie: "six" | "" | "six=" | "six" | "six" | "six" | "six" | "six" | "six" | "six" | "six" |
MOZILLA0015# All / no consensus (9 : 0) Set cookie: "six" "seven" | "" | "seven=; six=" | "seven" | "seven" | "seven" | "seven" | "seven" | "seven" | "seven" | "seven" |
MOZILLA0016# All / no consensus (9 : 0) Set cookie: "six" "seven" " =eight" | "" | "seven=; six=" | "eight" | "eight" | "eight" | "eight" | "eight" | "eight" | "eight" | "eight" |
MOZILLA0017# All / no consensus (9 : 0) Set cookie: "six" "seven" " =eight" "test=six" | "test=six" | "seven=; six=; test=six" | "eight; test=six" | "eight; test=six" | "eight; test=six" | "eight; test=six" | "eight; test=six" | "eight; test=six" | "eight; test=six" | "eight; test=six" |
NAME0033# All / no consensus (9 : 0) Set cookie: "=foo=bar" "aaa" | "" | "aaa=" | "aaa" | "aaa" | "aaa" | "aaa" | "aaa" | "aaa" | "aaa" | "aaa" |
0021# Majority (8 : 1) Set cookie: "a=b" "=x" "c=d" | "a=b; c=d" | "a=b; x; c=d" | "a=b; x; c=d" | "a=b; x; c=d" | "a=b; x; c=d" | "a=b; x; c=d" | "a=b; x; c=d" | "a=b; x; c=d" | "a=b; x; c=d" | |
CHROMIUM0009# Majority (8 : 1) Set cookie: "BLAHHH; path=/;" | "" | "BLAHHH" | "BLAHHH" | "BLAHHH" | "BLAHHH" | "BLAHHH" | "BLAHHH" | "BLAHHH" | "BLAHHH" | |
CHROMIUM0010# Majority (8 : 1) Set cookie: "\"BLA\\\"HHH\"; path=/;" | "" | "\"BLA\\\"HHH\"" | "\"BLA\\\"HHH\"" | "\"BLA\\\"HHH\"" | "\"BLA\\\"HHH\"" | "\"BLA\\\"HHH\"" | "\"BLA\\\"HHH\"" | "\"BLA\\\"HHH\"" | "\"BLA\\\"HHH\"" | |
CHROMIUM0012# Majority (8 : 1) Set cookie: "=ABC" | "" | "ABC" | "ABC" | "ABC" | "ABC" | "ABC" | "ABC" | "ABC" | "ABC" | |
NAME0017# Majority (8 : 1) Set cookie: "=a=bar" | "" | "a=bar" | "a=bar" | "a=bar" | "a=bar" | "a=bar" | "a=bar" | "a=bar" | "a=bar" | |
NAME0023# Majority (8 : 1) Set cookie: "foo;bar=baz" | "" | "foo" | "foo" | "foo" | "foo" | "foo" | "foo" | "foo" | "foo" | |
NAME0025# Majority (8 : 1) Set cookie: "===a=bar" | "" | "==a=bar" | "==a=bar" | "==a=bar" | "==a=bar" | "==a=bar" | "==a=bar" | "==a=bar" | "==a=bar" | |
NAME0028# Majority (8 : 1) Set cookie: "=a" | "" | "a" | "a" | "a" | "a" | "a" | "a" | "a" | "a" | |
NAME0031# Majority (8 : 1) Set cookie: "\"foo;bar\"=baz" | "" | "\"foo" | "\"foo" | "\"foo" | "\"foo" | "\"foo" | "\"foo" | "\"foo" | "\"foo" | |
NAME0032# Majority (8 : 1) Set cookie: "\"foo\\\"bar;baz\"=qux" | "" | "\"foo\\\"bar" | "\"foo\\\"bar" | "\"foo\\\"bar" | "\"foo\\\"bar" | "\"foo\\\"bar" | "\"foo\\\"bar" | "\"foo\\\"bar" | "\"foo\\\"bar" | |
DOMAIN0023# Majority (7 : 2) Set cookie: "foo2=bar2; domain=.example.org" "foo=bar; domain=home.example.org" Results URL: http://home.example.org:8888/cookie-parser-result?domain0023 | "foo2=bar2; foo=bar" | "foo=bar; foo2=bar2" | "foo=bar; foo2=bar2" | "foo=bar; foo2=bar2" | "foo=bar; foo2=bar2" | "foo=bar; foo2=bar2" | "foo=bar; foo2=bar2" | "foo=bar; foo2=bar2" | ||
PATH0027# Majority (7 : 2) Set cookie: "foo=bar; path=\"/cookie-parser-result/foo/qux;\"" Results URL: /cookie-parser-result/foo/qux?path0027 | "foo=bar" | "" | "" | "" | "" | "" | "" | "" | ||
0006# Majority (6 : 3) Set cookie: "foo=bar; max-age=0;" | "" | "foo=bar" | "foo=bar" | "foo=bar" | "foo=bar" | "foo=bar" | "foo=bar" | |||
DISABLED_CHROMIUM0020# Majority (6 : 3) Set cookie: Cookie is too long. Hover to view. | "" | Cookie is too long. Hover to view. | Cookie is too long. Hover to view. | Cookie is too long. Hover to view. | Cookie is too long. Hover to view. | Cookie is too long. Hover to view. | Cookie is too long. Hover to view. | |||
DISABLED_CHROMIUM0023# Majority (6 : 3) Set cookie: "AAA=BB\rZYX" | "AAA=BB" | "AAA=BB_ZYX" | "AAA=BB_ZYX" | "AAA=BB_ZYX" | "AAA=BB_ZYX" | "AAA=BB_ZYX" | "AAA=BB_ZYX" | |||
DOMAIN0029# Majority (6 : 3) Set cookie: "foo=bar" Results URL: http://subdomain.home.example.org:8888/cookie-parser-result?domain0029 | "" | "foo=bar" | "foo=bar" | "foo=bar" | "foo=bar" | "foo=bar" | "foo=bar" | |||
MOZILLA0001# Majority (6 : 3) Set cookie: "foo=bar; max-age=-1" | "" | "foo=bar" | "foo=bar" | "foo=bar" | "foo=bar" | "foo=bar" | "foo=bar" | |||
MOZILLA0002# Majority (6 : 3) Set cookie: "foo=bar; max-age=0" | "" | "foo=bar" | "foo=bar" | "foo=bar" | "foo=bar" | "foo=bar" | "foo=bar" | |||
MOZILLA0005# Majority (6 : 3) Set cookie: "foo=bar; max-age=-20" | "" | "foo=bar" | "foo=bar" | "foo=bar" | "foo=bar" | "foo=bar" | "foo=bar" | |||
MOZILLA0009# Majority (6 : 3) Set cookie: "foo=bar; max-age=60" "foo1=bar; max-age=60" "foo=differentvalue; max-age=0" | "foo1=bar" | "foo=differentvalue; foo1=bar" | "foo=differentvalue; foo1=bar" | "foo=differentvalue; foo1=bar" | "foo=differentvalue; foo1=bar" | "foo=differentvalue; foo1=bar" | "foo=differentvalue; foo1=bar" | |||
MOZILLA0010# Majority (6 : 3) Set cookie: "foo=bar; max-age=60" "foo1=bar; max-age=60" "foo=differentvalue; max-age=0" "foo2=evendifferentvalue; max-age=0" | "foo1=bar" | "foo=differentvalue; foo1=bar; foo2=evendifferentvalue" | "foo=differentvalue; foo1=bar; foo2=evendifferentvalue" | "foo=differentvalue; foo1=bar; foo2=evendifferentvalue" | "foo=differentvalue; foo1=bar; foo2=evendifferentvalue" | "foo=differentvalue; foo1=bar; foo2=evendifferentvalue" | "foo=differentvalue; foo1=bar; foo2=evendifferentvalue" | |||
MOZILLA0013# Majority (6 : 3) Set cookie: "test=kill; max-age=0" "five; max-age=0" | "" | "test=kill; five" | "test=kill; five" | "test=kill; five" | "test=kill; five" | "test=kill; five" | "test=kill; five" | |||
OPTIONAL_DOMAIN0030# Majority (6 : 3) Set cookie: "foo=bar; domain=" Results URL: http://home.example.org:8888/cookie-parser-result?optional-domain0030 | "foo=bar" | "" | "" | "" | "" | "" | "" | |||
OPTIONAL_DOMAIN0041# Majority (6 : 3) Set cookie: "foo=bar; domain=example.org; domain=" Results URL: http://home.example.org:8888/cookie-parser-result?optional-domain0041 | "foo=bar" | "" | "" | "" | "" | "" | "" | |||
PATH0024# Majority (6 : 3) Set cookie: "foo=bar; path=/cookie-parser-result/foo/qux?" Results URL: /cookie-parser-result/foo/qux?path0024 | "" | "foo=bar" | "foo=bar" | "foo=bar" | "foo=bar" | "foo=bar" | "foo=bar" | |||
PATH0025# Majority (6 : 3) Set cookie: "foo=bar; path=/cookie-parser-result/foo/qux#" Results URL: /cookie-parser-result/foo/qux?path0025 | "" | "foo=bar" | "foo=bar" | "foo=bar" | "foo=bar" | "foo=bar" | "foo=bar" | |||
CHARSET0001# Majority / no consensus (7 : 2) Set cookie: "foo=春节回家路·春运完全手册" | "foo=春节回家路·春运完全手册" | "foo=" | "foo=?????�??????" | "foo=?????�??????" | "foo=�K?�^�a���P�K?������?" | "foo=�K?�^�a���P�K?������?" | "foo=�t?���ƘH�E�t?���S���e" | "foo=�t?���ƘH�E�t?���S���e" | ||
CHARSET0002# Majority / no consensus (7 : 2) Set cookie: "春节回=家路·春运完全手册" | "春节回=家路·春运完全手册" | "" | "???=??�??????" | "???=??�??????" | "�K?�^=�a���P�K?������?" | "�K?�^=�a���P�K?������?" | "�t?��=�ƘH�E�t?���S���e" | "�t?��=�ƘH�E�t?���S���e" | ||
CHARSET0003# Majority / no consensus (7 : 2) Set cookie: "春节回=家路·春运; 完全手册" | "春节回=家路·春运" | "" | "???=??�??" | "???=??�??" | "�K?�^=�a���P�K?" | "�K?�^=�a���P�K?" | "�t?��=�ƘH�E�t?" | "�t?��=�ƘH�E�t?" | ||
CHARSET0004# Majority / no consensus (7 : 2) Set cookie: "foo=\"春节回家路·春运完全手册\"" | "foo=\"春节回家路·春运完全手册\"" | "foo=\"" | "foo=\"?????�??????\"" | "foo=\"?????�??????\"" | "foo=\"�K?�^�a���P�K?������?\"" | "foo=\"�K?�^�a���P�K?������?\"" | "foo=\"�t?���ƘH�E�t?���S���e\"" | "foo=\"�t?���ƘH�E�t?���S���e\"" | ||
0023# Minority - possible bug (2 : 7) Set cookie: "foo" "" | "" | "foo=" | "foo" | |||||||
0024# Minority - possible bug (2 : 7) Set cookie: "foo" "=" | "" | "foo=" | "foo" | |||||||
0025# Minority - possible bug (2 : 7) Set cookie: "foo" "; bar" | "" | "foo=" | "foo" | |||||||
0026# Minority - possible bug (2 : 7) Set cookie: "foo" " " | "" | "foo=" | "foo" | |||||||
0028# Minority - possible bug (2 : 7) Set cookie: "foo" "\t" | "" | "foo=" | "foo" | |||||||
DISABLED_PATH0029# Minority - possible bug (2 : 7) Set cookie: "foo=bar; path=/cookie-parser-result/foo/bar" Results URL: /cookie-parser-result/f%6Fo/bar?disabled-path0029 | "foo=bar" | "" | "" | |||||||
OPTIONAL_DOMAIN0042# Minority - possible bug (2 : 7) Set cookie: "foo=bar; domain=foo.example.org; domain=" Results URL: http://home.example.org:8888/cookie-parser-result?optional-domain0042 | "" | "foo=bar" | "foo=bar" | |||||||
0008# Bug (1 : 8) Set cookie: "foo=bar; version=1000;" | "foo=bar" | "" | ||||||||
0016# Bug (1 : 8) Set cookie: "z=y" "a=b" | "z=y; a=b" | "a=b; z=y" | ||||||||
0017# Bug (1 : 8) Set cookie: "z=y, a=b" | "z=y, a=b" | "z=y,a=b" | ||||||||
0022# Bug (1 : 8) Set cookie: "a=b" "x=" "c=d" | "a=b; x=; c=d" | "a=b; c=d; x=" | ||||||||
ATTRIBUTE0021# Bug (1 : 8) Set cookie: "foo=bar; Path=/qux; Path=/" | "foo=bar" | "" | ||||||||
ATTRIBUTE0022# Bug (1 : 8) Set cookie: "foo=bar; Path=/; Path=/qux" | "" | "foo=bar" | ||||||||
ATTRIBUTE0023# Bug (1 : 8) Set cookie: "foo=bar; Path=/qux; Path=/cookie-parser-result" | "foo=bar" | "" | ||||||||
ATTRIBUTE0024# Bug (1 : 8) Set cookie: "foo=bar; Path=/cookie-parser-result; Path=/qux" | "" | "foo=bar" | ||||||||
CHROMIUM0004# Bug (1 : 8) Set cookie: "aBc=\"zz;pp\" ; ;" | "aBc=\"zz" | "aBc=\"zz;pp\"" | ||||||||
CHROMIUM0015# Bug (1 : 8) Set cookie: " A=== BC ;foo;;; bar" | "A=== BC" | "A===BC" | ||||||||
COMMA0001# Bug (1 : 8) Set cookie: "foo=bar, baz=qux" | "foo=bar, baz=qux" | "foo=bar,baz=qux" | ||||||||
DOMAIN0014# Bug (1 : 8) Set cookie: "foo=bar; domain=home.example.org." Results URL: http://home.example.org:8888/cookie-parser-result?domain0014 | "" | "foo=bar" | ||||||||
DOMAIN0020# Bug (1 : 8) Set cookie: "foo2=bar2; domain=.home.example.org" "foo=bar; domain=home.example.org" Results URL: http://home.example.org:8888/cookie-parser-result?domain0020 | "foo2=bar2; foo=bar" | "foo=bar; foo2=bar2" | ||||||||
DOMAIN0024# Bug (1 : 8) Set cookie: "foo=bar; domain=.example.org; domain=home.example.org" Results URL: http://sibling.example.org:8888/cookie-parser-result?domain0024 | "" | "foo=bar" | ||||||||
DOMAIN0025# Bug (1 : 8) Set cookie: "foo=bar; domain=home.example.org; domain=.example.org" Results URL: http://sibling.example.org:8888/cookie-parser-result?domain0025 | "foo=bar" | "" | ||||||||
DOMAIN0031# Bug (1 : 8) Set cookie: "foo=bar; domain=home.example.org; domain=.example.org" Results URL: http://sibling.example.org:8888/cookie-parser-result?domain0031 | "foo=bar" | "" | ||||||||
DOMAIN0034# Bug (1 : 8) Set cookie: "foo=bar; domain=home.example.org; domain=home.example.com" Results URL: http://home.example.org:8888/cookie-parser-result?domain0034 | "" | "foo=bar" | ||||||||
DOMAIN0035# Bug (1 : 8) Set cookie: "foo=bar; domain=home.example.com; domain=home.example.org" Results URL: http://home.example.org:8888/cookie-parser-result?domain0035 | "foo=bar" | "" | ||||||||
NAME0020# Bug (1 : 8) Set cookie: "\"a=b\"=bar" | "\"a=b\"=bar" | "" | ||||||||
ORDERING0001# Bug (1 : 8) Set cookie: "key=val0;" "key=val1; path=/cookie-parser-result" "key=val2; path=/" "key=val3; path=/bar" "key=val4; domain=.example.org" "key=val5; domain=.example.org; path=/cookie-parser-result/foo" Results URL: /cookie-parser-result/foo/baz?ordering0001 | "key=val5; key=val1; key=val2; key=val4" | "key=val1; key=val2; key=val5; key=val4" | ||||||||
PATH0029# Bug (1 : 8) Set cookie: "a=b; \tpath\t=\t/cookie-parser-result\t" "x=y; \tpath\t=\t/book\t" | "a=b" | "a=b; x=y" | ||||||||
PATH0030# Bug (1 : 8) Set cookie: "foo=bar; path=/dog; path=" | "foo=bar" | "" | ||||||||
PATH0031# Bug (1 : 8) Set cookie: "foo=bar; path=; path=/dog" | "" | "foo=bar" | ||||||||
VALUE0004# Bug (1 : 8) Set cookie: "foo=\"bar;baz\"" | "foo=\"bar" | "foo=\"bar;baz\"" | ||||||||
VALUE0006# Bug (1 : 8) Set cookie: "\tfoo\t=\tbar\t \t;\tttt" | "foo=bar" | "" | ||||||||
PATH0014# Bug (1 : 8) Set cookie: "foo=bar; path=/cookie-parser-result/foo/qux/" Results URL: /cookie-parser-result/foo/qux?path0014 | "" | "foo=bar" |