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]>

Reply via email to