@@ -22,35 +22,46 @@ public class CookieUtil {
2222
2323private static final BitSet VALID_COOKIE_NAME_OCTETS =validCookieNameOctets (VALID_COOKIE_VALUE_OCTETS );
2424
25+ // cookie-octet = %x21 / %x23-2B / %x2D-3A / %x3C-5B / %x5D-7E
2526// US-ASCII characters excluding CTLs, whitespace, DQUOTE, comma, semicolon, and backslash
2627private static BitSet validCookieValueOctets () {
27-
2828BitSet bits =new BitSet (8 );
29- for (int i =35 ;i <127 ;i ++) {
30- // US-ASCII characters excluding CTLs (%x00-1F / %x7F)
29+ bits .set (0x21 );
30+ for (int i =0x23 ;i <=0x2B ;i ++) {
31+ bits .set (i );
32+ }
33+ for (int i =0x2D ;i <=0x3A ;i ++) {
34+ bits .set (i );
35+ }
36+ for (int i =0x3C ;i <=0x5B ;i ++) {
37+ bits .set (i );
38+ }
39+ for (int i =0x5D ;i <=0x7E ;i ++) {
3140bits .set (i );
3241 }
33- bits .set ('"' ,false );// exclude DQUOTE = %x22
34- bits .set (',' ,false );// exclude comma = %x2C
35- bits .set (';' ,false );// exclude semicolon = %x3B
36- bits .set ('\\' ,false );// exclude backslash = %x5C
3742return bits ;
3843 }
3944
40- // token = 1*<any CHAR except CTLs or separators>
41- // separators = "(" | ")" | "<" | ">" | "@"
42- // | "," | ";" | ":" | "\" | <">
43- // | "/" | "[" | "]" | "?" | "="
44- // | "{" | "}" | SP | HT
45+ // token = 1*<any CHAR except CTLs or separators>
46+ // separators = "(" | ")" | "<" | ">" | "@"
47+ // | "," | ";" | ":" | "\" | <">
48+ // | "/" | "[" | "]" | "?" | "="
49+ // | "{" | "}" | SP | HT
4550private static BitSet validCookieNameOctets (BitSet validCookieValueOctets ) {
4651BitSet bits =new BitSet (8 );
47- bits .or (validCookieValueOctets );
52+ for (int i =32 ;i <127 ;i ++) {
53+ bits .set (i );
54+ }
4855bits .set ('(' ,false );
4956bits .set (')' ,false );
5057bits .set ('<' ,false );
5158bits .set ('>' ,false );
5259bits .set ('@' ,false );
60+ bits .set (',' ,false );
61+ bits .set (';' ,false );
5362bits .set (':' ,false );
63+ bits .set ('\\' ,false );
64+ bits .set ('"' ,false );
5465bits .set ('/' ,false );
5566bits .set ('[' ,false );
5667bits .set (']' ,false );
@@ -62,7 +73,7 @@ private static BitSet validCookieNameOctets(BitSet validCookieValueOctets) {
6273bits .set ('\t' ,false );
6374return bits ;
6475 }
65-
76+
6677static int firstInvalidCookieNameOctet (CharSequence cs ) {
6778return firstInvalidOctet (cs ,VALID_COOKIE_NAME_OCTETS );
6879 }
@@ -103,10 +114,10 @@ static long computeExpiresAsMaxAge(String expires) {
103114return maxAgeMillis /1000 + (maxAgeMillis %1000 !=0 ?1 :0 );
104115 }
105116 }
106-
117+
107118return Long .MIN_VALUE ;
108119 }
109-
120+
110121private CookieUtil () {
111122// Unused
112123 }