CookieNetscapeDraft to ignore Version and Max-Age attributes; BrowserCompatSpec to reset cookie version to 0 for Neetscape style cookies
git-svn-id: https://svn.apache.org/repos/asf/httpcomponents/httpclient/trunk@1617278 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
f955504b33
commit
3df564f0c6
|
@ -28,15 +28,19 @@
|
|||
package org.apache.http.impl.cookie;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
|
||||
import org.apache.http.FormattedHeader;
|
||||
import org.apache.http.Header;
|
||||
import org.apache.http.HeaderElement;
|
||||
import org.apache.http.NameValuePair;
|
||||
import org.apache.http.annotation.NotThreadSafe;
|
||||
import org.apache.http.client.utils.DateUtils;
|
||||
import org.apache.http.cookie.ClientCookie;
|
||||
import org.apache.http.cookie.Cookie;
|
||||
import org.apache.http.cookie.CookieAttributeHandler;
|
||||
import org.apache.http.cookie.CookieOrigin;
|
||||
import org.apache.http.cookie.MalformedCookieException;
|
||||
import org.apache.http.cookie.SM;
|
||||
|
@ -133,7 +137,7 @@ public class BrowserCompatSpec extends CookieSpecBase {
|
|||
throw new MalformedCookieException("Unrecognized cookie header '"
|
||||
+ header.toString() + "'");
|
||||
}
|
||||
HeaderElement[] helems = header.getElements();
|
||||
final HeaderElement[] helems = header.getElements();
|
||||
boolean versioned = false;
|
||||
boolean netscape = false;
|
||||
for (final HeaderElement helem: helems) {
|
||||
|
@ -164,9 +168,35 @@ public class BrowserCompatSpec extends CookieSpecBase {
|
|||
buffer.append(s);
|
||||
cursor = new ParserCursor(0, buffer.length());
|
||||
}
|
||||
helems = new HeaderElement[] { parser.parseHeader(buffer, cursor) };
|
||||
final HeaderElement elem = parser.parseHeader(buffer, cursor);
|
||||
final String name = elem.getName();
|
||||
final String value = elem.getValue();
|
||||
if (name == null || name.isEmpty()) {
|
||||
throw new MalformedCookieException("Cookie name may not be empty");
|
||||
}
|
||||
final BasicClientCookie cookie = new BasicClientCookie(name, value);
|
||||
cookie.setPath(getDefaultPath(origin));
|
||||
cookie.setDomain(getDefaultDomain(origin));
|
||||
|
||||
// cycle through the parameters
|
||||
final NameValuePair[] attribs = elem.getParameters();
|
||||
for (int j = attribs.length - 1; j >= 0; j--) {
|
||||
final NameValuePair attrib = attribs[j];
|
||||
final String s = attrib.getName().toLowerCase(Locale.ROOT);
|
||||
cookie.setAttribute(s, attrib.getValue());
|
||||
final CookieAttributeHandler handler = findAttribHandler(s);
|
||||
if (handler != null) {
|
||||
handler.parse(cookie, attrib.getValue());
|
||||
}
|
||||
}
|
||||
// Override version for Netscape style cookies
|
||||
if (netscape) {
|
||||
cookie.setVersion(0);
|
||||
}
|
||||
return Collections.<Cookie>singletonList(cookie);
|
||||
} else {
|
||||
return parse(helems, origin);
|
||||
}
|
||||
return parse(helems, origin);
|
||||
}
|
||||
|
||||
private static boolean isQuoteEnclosed(final String s) {
|
||||
|
|
|
@ -69,7 +69,6 @@ public class NetscapeDraftSpec extends CookieSpecBase {
|
|||
}
|
||||
registerAttribHandler(ClientCookie.PATH_ATTR, new BasicPathHandler());
|
||||
registerAttribHandler(ClientCookie.DOMAIN_ATTR, new NetscapeDomainHandler());
|
||||
registerAttribHandler(ClientCookie.MAX_AGE_ATTR, new BasicMaxAgeHandler());
|
||||
registerAttribHandler(ClientCookie.SECURE_ATTR, new BasicSecureHandler());
|
||||
registerAttribHandler(ClientCookie.COMMENT_ATTR, new BasicCommentHandler());
|
||||
registerAttribHandler(ClientCookie.EXPIRES_ATTR, new BasicExpiresHandler(
|
||||
|
|
|
@ -460,7 +460,7 @@ public class TestBrowserCompatSpec {
|
|||
Assert.assertTrue("Secure",cookies.get(0).isSecure());
|
||||
Assert.assertEquals(new Date(10000L),cookies.get(0).getExpiryDate());
|
||||
Assert.assertEquals("Comment","This is a comment.",cookies.get(0).getComment());
|
||||
Assert.assertEquals("Version",1,cookies.get(0).getVersion());
|
||||
Assert.assertEquals("Version",0,cookies.get(0).getVersion());
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
|
@ -132,6 +132,25 @@ public class TestCookieNetscapeDraft {
|
|||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testParseVersionIgnored() throws Exception {
|
||||
final Header header = new BasicHeader("Set-Cookie", "name1=value1;Path=/path/;Version=1;");
|
||||
|
||||
final CookieSpec cookiespec = new NetscapeDraftSpec();
|
||||
final CookieOrigin origin = new CookieOrigin("host", 80, "/path/", true);
|
||||
final List<Cookie> cookies = cookiespec.parse(header, origin);
|
||||
for (int i = 0; i < cookies.size(); i++) {
|
||||
cookiespec.validate(cookies.get(i), origin);
|
||||
}
|
||||
Assert.assertEquals("Found 1 cookies.",1,cookies.size());
|
||||
final Cookie cookie = cookies.get(0);
|
||||
Assert.assertEquals("Name","name1", cookie.getName());
|
||||
Assert.assertEquals("Value", "value1", cookie.getValue());
|
||||
Assert.assertEquals("Domain", "host", cookie.getDomain());
|
||||
Assert.assertEquals("Path","/path/", cookie.getPath());
|
||||
Assert.assertEquals(0, cookie.getVersion());
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests Netscape specific cookie formatting.
|
||||
*/
|
||||
|
|
Loading…
Reference in New Issue