dion 02/02/18 16:15:18
Modified: httpclient/src/java/org/apache/commons/httpclient
Cookie.java
Log:
Various NPE fixes for bug 6513 and 6511
Revision Changes Path
1.13 +29 -21
jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/Cookie.java
Index: Cookie.java
===================================================================
RCS file:
/home/cvs/jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/Cookie.java,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- Cookie.java 14 Feb 2002 00:02:34 -0000 1.12
+++ Cookie.java 19 Feb 2002 00:15:18 -0000 1.13
@@ -1,7 +1,7 @@
/*
- * $Header:
/home/cvs/jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/Cookie.java,v
1.12 2002/02/14 00:02:34 dion Exp $
- * $Revision: 1.12 $
- * $Date: 2002/02/14 00:02:34 $
+ * $Header:
/home/cvs/jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/Cookie.java,v
1.13 2002/02/19 00:15:18 dion Exp $
+ * $Revision: 1.13 $
+ * $Date: 2002/02/19 00:15:18 $
* ====================================================================
*
* The Apache Software License, Version 1.1
@@ -87,7 +87,7 @@
* @author Rod Waldhoff
* @author dIon Gillard
* @author <a href="mailto:[EMAIL PROTECTED]">John Evans</a>
- * @version $Revision: 1.12 $ $Date: 2002/02/14 00:02:34 $
+ * @version $Revision: 1.13 $ $Date: 2002/02/19 00:15:18 $
*/
public class Cookie extends NameValuePair implements Serializable, Comparator {
@@ -228,11 +228,13 @@
* @see #getDomain
*/
public void setDomain(String domain) {
- int ndx = domain.indexOf(":");
- if (ndx != -1) {
- domain = domain.substring(0, ndx);
+ if (domain != null) {
+ int ndx = domain.indexOf(":");
+ if (ndx != -1) {
+ domain = domain.substring(0, ndx);
+ }
+ _domain = domain.toLowerCase();
}
- _domain = domain.toLowerCase();
}
@@ -391,7 +393,7 @@
// should /foobar see the cookie? Probably not.
return (
(getExpiryDate() == null || getExpiryDate().after(now)) && // only
add the cookie if it hasn't yet expired
- domain.endsWith(getDomain()) && // and
the domain pattern matches
+ (getDomain() == null || domain.endsWith(getDomain()) ) &&
// and the domain pattern matches
((getPath() == null) || (path.startsWith(getPath()))) && // and
the path is null or matching
(getSecure() ? secure : true) // and
if the secure flag is set, only if the request is actually secure
);
@@ -499,6 +501,8 @@
* <p>This method is implemented so a cookie can be used as a comparator for
* a SortedSet of cookies. Specifically it's used above in the
* createCookieHeader method.</p>
+ * <p>The compare only compares the path of the cookie, see section 4.3.4
+ * of RFC2109</p>
*/
public int compare(Object o1, Object o2) {
if (!(o1 instanceof Cookie)) {
@@ -509,21 +513,25 @@
}
Cookie c1 = (Cookie)o1;
Cookie c2 = (Cookie)o2;
- if (c1.getDomain().equals(c2.getDomain())) {
- if (c1.getPath().equals(c2.getPath())) {
- return 0; // same domain, same path
+ if (c1.getPath() == null && c2.getPath() == null) {
+ return 0;
+ } else if (c1.getPath() == null) {
+ // null is assumed to be "/"
+ if (c2.getPath().equals("/")) {
+ return 0;
+ } else {
+ return -1;
}
- // same domain, different path
- if (c1.getPath().length() == c2.getPath().length()) {
- // same length path
- return stringCollator.compare(c1.getPath(), c2.getPath());
+ } else if (c2.getPath() == null) {
+ // null is assumed to be "/"
+ if (c1.getPath().equals("/")) {
+ return 0;
} else {
- // different length paths
- return c1.getPath().length() < c2.getPath().length() ? -1 : 1;
+ return 1;
}
+ } else {
+ return stringCollator.compare(c1.getPath(), c2.getPath());
}
- // different domain
- return stringCollator.compare(c1.getDomain(), c2.getDomain());
}
/**
@@ -733,7 +741,7 @@
// invalid domain scope
// domain must be either .local or must contain at least two dots
- if (!cookie.getDomain().equals("localhost")) {
+ if (cookie.getDomain() != null &&
!cookie.getDomain().equals("localhost")) {
// Not required to have at least two dots. RFC 2965.
// A Set-Cookie2 with Domain=ajax.com will be accepted.
--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>