olegk       2003/02/16 09:56:17

  Modified:    httpclient/src/java/org/apache/commons/httpclient
                        HttpMethodBase.java
  Log:
  Changelog:
  
  - fix for inconsistent cookie rejection in HttpMethodBase#ParseResponseHeaders method
  
  Reported by by James Couball <[EMAIL PROTECTED]>
  Contributed by James Couball
  Reviewed by Oleg Kalnichevski
  
  Revision  Changes    Path
  1.113     +46 -36    
jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/HttpMethodBase.java
  
  Index: HttpMethodBase.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/HttpMethodBase.java,v
  retrieving revision 1.112
  retrieving revision 1.113
  diff -u -r1.112 -r1.113
  --- HttpMethodBase.java       16 Feb 2003 13:08:32 -0000      1.112
  +++ HttpMethodBase.java       16 Feb 2003 17:56:17 -0000      1.113
  @@ -73,6 +73,7 @@
   import java.util.Set;
   import java.util.StringTokenizer;
   
  +import org.apache.commons.httpclient.cookie.MalformedCookieException;
   import org.apache.commons.httpclient.cookie.CookiePolicy;
   import org.apache.commons.httpclient.cookie.CookieSpec;
   import org.apache.commons.httpclient.util.URIUtil;
  @@ -1586,45 +1587,54 @@
           LOG.trace("enter HttpMethodBase.processResponseHeaders(HttpState, "
               + "HttpConnection)");
   
  -        // add cookies, if any
  -        // should we set cookies?
  -        Header setCookieHeader = getResponseHeader("set-cookie2");
  -        if (null == setCookieHeader) { //ignore old-style if new is supported
  -            setCookieHeader = getResponseHeader("set-cookie");
  +        Header[] headers = getResponseHeaderGroup().getHeaders("set-cookie2");
  +        //Only process old style set-cookie headers if new style headres
  +        //are not present
  +        if (headers.length == 0) { 
  +            headers = getResponseHeaderGroup().getHeaders("set-cookie");
           }
  -
  -        if (setCookieHeader == null) { 
  -            return;
  -        }
  -        try {
  -
  -            CookieSpec parser = 
CookiePolicy.getSpecByPolicy(state.getCookiePolicy());
  -            Cookie[] cookies = parser.parse(
  -              conn.getHost(),
  -              conn.getPort(),
  -              getPath(),
  -              conn.isSecure(),
  -              setCookieHeader);
  -            for (int i = 0; i < cookies.length; i++) {
  -                Cookie cookie = cookies[i];
  -                parser.validate(
  +        
  +        CookieSpec parser = CookiePolicy.getSpecByPolicy(state.getCookiePolicy());
  +        for (int i = 0; i < headers.length; i++) {
  +            Header header = headers[i];
  +            Cookie[] cookies = null;
  +            try {
  +                cookies = parser.parse(
                     conn.getHost(),
                     conn.getPort(),
                     getPath(),
                     conn.isSecure(),
  -                  cookie);
  -                if (LOG.isDebugEnabled()) {
  -                    LOG.debug("Cookie accepted: \"" 
  -                        + parser.formatCookie(cookie) + "\"");
  +                  header);
  +            } catch (MalformedCookieException e) {
  +                if (LOG.isWarnEnabled()) {
  +                    LOG.warn("Invalid cookie header: \"" 
  +                        + header.getValue() 
  +                        + "\". " + e.getMessage());
                   }
  -                state.addCookie(cookie);
               }
  -
  -        } catch (HttpException e) {
  -            if (LOG.isWarnEnabled()) {
  -                LOG.warn("Cookie rejected: \"" 
  -                    + setCookieHeader.getValue() 
  -                    + "\". " + e.getMessage());
  +            if (cookies != null) {
  +                for (int j = 0; j < cookies.length; j++) {
  +                    Cookie cookie = cookies[j];
  +                    try {
  +                        parser.validate(
  +                          conn.getHost(),
  +                          conn.getPort(),
  +                          getPath(),
  +                          conn.isSecure(),
  +                          cookie);
  +                        state.addCookie(cookie);
  +                        if (LOG.isDebugEnabled()) {
  +                            LOG.debug("Cookie accepted: \"" 
  +                                + parser.formatCookie(cookie) + "\"");
  +                        }
  +                    } catch(MalformedCookieException e) {
  +                        if (LOG.isWarnEnabled()) {
  +                            LOG.warn("Cookie rejected: \"" 
  +                                + parser.formatCookie(cookie) + 
  +                                "\". " + e.getMessage());
  +                        }
  +                    }
  +                }
               }
           }
       }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to