Skip to content

Commit 2e044db

Browse files
committed
Drop cookie value unescaping, close #858
1 parent a771e0f commit 2e044db

File tree

8 files changed

+318
-323
lines changed

8 files changed

+318
-323
lines changed

api/src/main/java/org/asynchttpclient/cookie/Cookie.java

Lines changed: 16 additions & 17 deletions
Original file line numberOriginal file lineDiff line numberDiff line change
@@ -14,14 +14,13 @@
14

14

15
public class Cookie {
15
public class Cookie {
16

16

17-
public static Cookie newValidCookie(String name, String value, String rawValue, String domain, String path, long expires, int maxAge,
17+
public static Cookie newValidCookie(String name, String value, boolean wrap, String domain, String path, long expires, int maxAge, boolean secure, boolean httpOnly) {
18-
boolean secure, boolean httpOnly) {
19

18

20
if (name == null) {
19
if (name == null) {
21
throw new NullPointerException("name");
20
throw new NullPointerException("name");
22
}
21
}
23
name = name.trim();
22
name = name.trim();
24-
if (name.isEmpty()) {
23+
if (name.length() == 0) {
25
throw new IllegalArgumentException("empty name");
24
throw new IllegalArgumentException("empty name");
26
}
25
}
27

26

@@ -42,8 +41,7 @@ public static Cookie newValidCookie(String name, String value, String rawValue,
42
case ',':
41
case ',':
43
case ';':
42
case ';':
44
case '=':
43
case '=':
45-
throw new IllegalArgumentException("name contains one of the following prohibited characters: " + "=,; \\t\\r\\n\\v\\f: "
44+
throw new IllegalArgumentException("name contains one of the following prohibited characters: " + "=,; \\t\\r\\n\\v\\f: " + name);
46-
+ name);
47
}
45
}
48
}
46
}
49

47

@@ -58,15 +56,15 @@ public static Cookie newValidCookie(String name, String value, String rawValue,
58
domain = validateValue("domain", domain);
56
domain = validateValue("domain", domain);
59
path = validateValue("path", path);
57
path = validateValue("path", path);
60

58

61-
return new Cookie(name, value, rawValue, domain, path, expires, maxAge, secure, httpOnly);
59+
return new Cookie(name, value, wrap, domain, path, expires, maxAge, secure, httpOnly);
62
}
60
}
63

61

64
private static String validateValue(String name, String value) {
62
private static String validateValue(String name, String value) {
65
if (value == null) {
63
if (value == null) {
66
return null;
64
return null;
67
}
65
}
68
value = value.trim();
66
value = value.trim();
69-
if (value.isEmpty()) {
67+
if (value.length() == 0) {
70
return null;
68
return null;
71
}
69
}
72

70

@@ -78,28 +76,26 @@ private static String validateValue(String name, String value) {
78
case '\f':
76
case '\f':
79
case 0x0b:
77
case 0x0b:
80
case ';':
78
case ';':
81-
throw new IllegalArgumentException(name + " contains one of the following prohibited characters: " + ";\\r\\n\\f\\v ("
79+
throw new IllegalArgumentException(name + " contains one of the following prohibited characters: " + ";\\r\\n\\f\\v (" + value + ')');
82-
+ value + ')');
83
}
80
}
84
}
81
}
85
return value;
82
return value;
86
}
83
}
87

84

88
private final String name;
85
private final String name;
89
private final String value;
86
private final String value;
90-
private final String rawValue;
87+
private final boolean wrap;
91
private final String domain;
88
private final String domain;
92
private final String path;
89
private final String path;
93
private long expires;
90
private long expires;
94
private final int maxAge;
91
private final int maxAge;
95
private final boolean secure;
92
private final boolean secure;
96
private final boolean httpOnly;
93
private final boolean httpOnly;
97

94

98-
public Cookie(String name, String value, String rawValue, String domain, String path, long expires, int maxAge, boolean secure,
95+
public Cookie(String name, String value, boolean wrap, String domain, String path, long expires, int maxAge, boolean secure, boolean httpOnly) {
99-
boolean httpOnly) {
100
this.name = name;
96
this.name = name;
101
this.value = value;
97
this.value = value;
102-
this.rawValue = rawValue;
98+
this.wrap = wrap;
103
this.domain = domain;
99
this.domain = domain;
104
this.path = path;
100
this.path = path;
105
this.expires = expires;
101
this.expires = expires;
@@ -120,8 +116,8 @@ public String getValue() {
120
return value;
116
return value;
121
}
117
}
122

118

123-
public String getRawValue() {
119+
public boolean isWrap() {
124-
return rawValue;
120+
return wrap;
125
}
121
}
126

122

127
public String getPath() {
123
public String getPath() {
@@ -131,7 +127,7 @@ public String getPath() {
131
public long getExpires() {
127
public long getExpires() {
132
return expires;
128
return expires;
133
}
129
}
134-
130+
135
public int getMaxAge() {
131
public int getMaxAge() {
136
return maxAge;
132
return maxAge;
137
}
133
}
@@ -149,7 +145,10 @@ public String toString() {
149
StringBuilder buf = new StringBuilder();
145
StringBuilder buf = new StringBuilder();
150
buf.append(name);
146
buf.append(name);
151
buf.append('=');
147
buf.append('=');
152-
buf.append(rawValue);
148+
if (wrap)
149+
buf.append('"').append(value).append('"');
150+
else
151+
buf.append(value);
153
if (domain != null) {
152
if (domain != null) {
154
buf.append("; domain=");
153
buf.append("; domain=");
155
buf.append(domain);
154
buf.append(domain);

0 commit comments

Comments
 (0)