markt       2004/08/26 12:06:39

  Modified:    util/java/org/apache/tomcat/util/http Cookies.java
  Log:
  Tab police (prior to looking at bug 30870)
  
  Revision  Changes    Path
  1.8       +282 -274  
jakarta-tomcat-connectors/util/java/org/apache/tomcat/util/http/Cookies.java
  
  Index: Cookies.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-connectors/util/java/org/apache/tomcat/util/http/Cookies.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- Cookies.java      9 Aug 2004 23:23:43 -0000       1.7
  +++ Cookies.java      26 Aug 2004 19:06:39 -0000      1.8
  @@ -50,7 +50,7 @@
        *     information from the provided headers.
        */
       public Cookies(MimeHeaders headers) {
  -     this.headers=headers;
  +        this.headers=headers;
       }
   
       /**
  @@ -80,12 +80,12 @@
        * Recycle.
        */
       public void recycle() {
  -     for( int i=0; i< cookieCount; i++ ) {
  -         if( scookies[i]!=null )
  -             scookies[i].recycle();
  -     }
  -     cookieCount=0;
  -     unprocessed=true;
  +            for( int i=0; i< cookieCount; i++ ) {
  +            if( scookies[i]!=null )
  +                scookies[i].recycle();
  +        }
  +        cookieCount=0;
  +        unprocessed=true;
       }
   
       /**
  @@ -105,18 +105,18 @@
       // -------------------- Indexed access --------------------
       
       public ServerCookie getCookie( int idx ) {
  -     if( unprocessed ) {
  -         getCookieCount(); // will also update the cookies
  -     }
  -     return scookies[idx];
  +        if( unprocessed ) {
  +            getCookieCount(); // will also update the cookies
  +        }
  +        return scookies[idx];
       }
   
       public int getCookieCount() {
  -     if( unprocessed ) {
  -         unprocessed=false;
  -         processCookies(headers);
  -     }
  -     return cookieCount;
  +        if( unprocessed ) {
  +            unprocessed=false;
  +            processCookies(headers);
  +        }
  +        return cookieCount;
       }
   
       // -------------------- Adding cookies --------------------
  @@ -126,19 +126,19 @@
        *  The caller can set the name/value and attributes for the cookie
        */
       public ServerCookie addCookie() {
  -     if( cookieCount >= scookies.length  ) {
  -         ServerCookie scookiesTmp[]=new ServerCookie[2*cookieCount];
  -         System.arraycopy( scookies, 0, scookiesTmp, 0, cookieCount);
  -         scookies=scookiesTmp;
  -     }
  -     
  -     ServerCookie c = scookies[cookieCount];
  -     if( c==null ) {
  -         c= new ServerCookie();
  -         scookies[cookieCount]=c;
  -     }
  -     cookieCount++;
  -     return c;
  +        if( cookieCount >= scookies.length  ) {
  +            ServerCookie scookiesTmp[]=new ServerCookie[2*cookieCount];
  +            System.arraycopy( scookies, 0, scookiesTmp, 0, cookieCount);
  +            scookies=scookiesTmp;
  +        }
  +        
  +        ServerCookie c = scookies[cookieCount];
  +        if( c==null ) {
  +            c= new ServerCookie();
  +            scookies[cookieCount]=c;
  +        }
  +        cookieCount++;
  +        return c;
       }
   
   
  @@ -147,32 +147,32 @@
       /** Add all Cookie found in the headers of a request.
        */
       public  void processCookies( MimeHeaders headers ) {
  -     if( headers==null )
  -         return;// nothing to process
  -     // process each "cookie" header
  -     int pos=0;
  -     while( pos>=0 ) {
  -         // Cookie2: version ? not needed
  -         pos=headers.findHeader( "Cookie", pos );
  -         // no more cookie headers headers
  -         if( pos<0 ) break;
  -
  -         MessageBytes cookieValue=headers.getValue( pos );
  -         if( cookieValue==null || cookieValue.isNull() ) continue;
  -
  -         // Uncomment to test the new parsing code
  -         if( cookieValue.getType() == MessageBytes.T_BYTES ) {
  -             if( dbg>0 ) log( "Parsing b[]: " + cookieValue.toString());
  -             ByteChunk bc=cookieValue.getByteChunk();
  -             processCookieHeader( bc.getBytes(),
  -                                  bc.getOffset(),
  -                                  bc.getLength());
  -         } else {
  -             if( dbg>0 ) log( "Parsing S: " + cookieValue.toString());
  -             processCookieHeader( cookieValue.toString() );
  -         }
  -         pos++;// search from the next position
  -     }
  +        if( headers==null )
  +            return;// nothing to process
  +        // process each "cookie" header
  +        int pos=0;
  +        while( pos>=0 ) {
  +            // Cookie2: version ? not needed
  +            pos=headers.findHeader( "Cookie", pos );
  +            // no more cookie headers headers
  +            if( pos<0 ) break;
  +
  +            MessageBytes cookieValue=headers.getValue( pos );
  +            if( cookieValue==null || cookieValue.isNull() ) continue;
  +
  +            // Uncomment to test the new parsing code
  +            if( cookieValue.getType() == MessageBytes.T_BYTES ) {
  +                if( dbg>0 ) log( "Parsing b[]: " + cookieValue.toString());
  +                ByteChunk bc=cookieValue.getByteChunk();
  +                processCookieHeader( bc.getBytes(),
  +                                     bc.getOffset(),
  +                                     bc.getLength());
  +            } else {
  +                if( dbg>0 ) log( "Parsing S: " + cookieValue.toString());
  +                processCookieHeader( cookieValue.toString() );
  +            }
  +            pos++;// search from the next position
  +        }
       }
   
       /** Process a byte[] header - allowing fast processing of the
  @@ -180,182 +180,190 @@
        */
       void processCookieHeader(  byte bytes[], int off, int len )
       {
  -     if( len<=0 || bytes==null ) return;
  -     int end=off+len;
  -     int pos=off;
  -     
  -     int version=0; //sticky
  -     ServerCookie sc=null;
  -     
  -
  -     while( pos<end ) {
  -         byte cc;
  -         // [ skip_spaces name skip_spaces "=" skip_spaces value EXTRA ; ] *
  -         if( dbg>0 ) log( "Start: " + pos + " " + end );
  -         
  -         pos=skipSpaces(bytes, pos, end);
  -         if( pos>=end )
  -             return; // only spaces
  -         int startName=pos;
  -         if( dbg>0 ) log( "SN: " + pos );
  -         
  -         // Version should be the first token
  -         boolean isSpecial=false;
  -         if(bytes[pos]=='$') { pos++; isSpecial=true; }
  -
  -         pos= findDelim1( bytes, startName, end); // " =;,"
  -         int endName=pos;
  -         // current = "=" or " " or DELIM
  -         pos= skipSpaces( bytes, endName, end ); 
  -         if( dbg>0 ) log( "DELIM: " + endName + " " + (char)bytes[pos]);
  -
  -         if(pos >= end ) {
  -             // it's a name-only cookie ( valid in RFC2109 )
  -             if( ! isSpecial ) {
  -                 sc=addCookie();
  -                 sc.getName().setBytes( bytes, startName,
  -                                        endName-startName );
  -                 sc.getValue().setString("");
  -                 sc.setVersion( version );
  -                 if( dbg>0 ) log( "Name only, end: " + startName + " " +
  -                                  endName);
  -             }
  -             return;
  -         }
  -
  -         cc=bytes[pos];
  -         pos++;
  -         if( cc==';' || cc==',' || pos>=end ) {
  -             if( ! isSpecial && startName!= endName ) {
  -                 sc=addCookie();
  -                 sc.getName().setBytes( bytes, startName,
  -                                        endName-startName );
  -                 sc.getValue().setString("");
  -                 sc.setVersion( version );
  -                 if( dbg>0 ) log( "Name only: " + startName + " " + endName);
  -             }
  -             continue;
  -         }
  -         
  -         // we should have "=" ( tested all other alternatives )
  -         int startValue=skipSpaces( bytes, pos, end);
  -         int endValue=startValue;
  -         
  -         // quote is valid only in version=1 cookies
  -         cc=bytes[pos];
  -         if( ( version == 1 || isSpecial ) && ( cc== '\'' || cc=='"' ) ) {
  -             startValue++;
  -             endValue=indexOf( bytes, startValue, end, cc );
  -             pos=endValue+1; // to skip to next cookie
  -         } else {
  -             endValue=findDelim2( bytes, startValue, end );
  -             pos=endValue+1;
  -         }
  -         
  -         // if not $Version, etc
  -         if( ! isSpecial ) {
  -             sc=addCookie();
  -             sc.getName().setBytes( bytes, startName, endName-startName );
  -             sc.getValue().setBytes( bytes, startValue, endValue-startValue);
  -             sc.setVersion( version );
  -             if( dbg>0 ) log( "New: " + sc.getName() + "X=X" + sc.getValue());
  -             continue;
  -         }
  -         
  -         // special - Path, Version, Domain, Port
  -         if( dbg>0 ) log( "Special: " + startName + " " + endName);
  -         // XXX TODO
  -         if( equals( "$Version", bytes, startName, endName ) ) {
  -             if(dbg>0 ) log( "Found version " );
  -             if( bytes[startValue]=='1' && endValue==startValue+1 ) {
  -                 version=1;
  -                 if(dbg>0 ) log( "Found version=1" );
  -             }
  -             continue;
  -         }
  -         if( sc==null ) {
  -             // Path, etc without a previous cookie
  -             continue;
  -         }
  -         if( equals( "$Path", bytes, startName, endName ) ) {
  -             sc.getPath().setBytes( bytes, startValue, endValue-startValue );
  -         }
  -         if( equals( "$Domain", bytes, startName, endName ) ) {
  -             sc.getDomain().setBytes( bytes, startValue, endValue-startValue );
  -         }
  -         if( equals( "$Port", bytes, startName, endName ) ) {
  -             // sc.getPort().setBytes( bytes, startValue, endValue-startValue );
  -         }
  -     }
  +        if( len<=0 || bytes==null ) return;
  +        int end=off+len;
  +        int pos=off;
  +        
  +        int version=0; //sticky
  +        ServerCookie sc=null;
  +        
  +
  +        while( pos<end ) {
  +            byte cc;
  +            // [ skip_spaces name skip_spaces "=" skip_spaces value EXTRA ; ] *
  +            if( dbg>0 ) log( "Start: " + pos + " " + end );
  +            
  +            pos=skipSpaces(bytes, pos, end);
  +            if( pos>=end )
  +                return; // only spaces
  +            int startName=pos;
  +            if( dbg>0 ) log( "SN: " + pos );
  +            
  +            // Version should be the first token
  +            boolean isSpecial=false;
  +            if(bytes[pos]=='$') { pos++; isSpecial=true; }
  +
  +            pos= findDelim1( bytes, startName, end); // " =;,"
  +            int endName=pos;
  +            // current = "=" or " " or DELIM
  +            pos= skipSpaces( bytes, endName, end ); 
  +            if( dbg>0 ) log( "DELIM: " + endName + " " + (char)bytes[pos]);
  +
  +            if(pos >= end ) {
  +                // it's a name-only cookie ( valid in RFC2109 )
  +                if( ! isSpecial ) {
  +                    sc=addCookie();
  +                    sc.getName().setBytes( bytes, startName,
  +                                           endName-startName );
  +                    sc.getValue().setString("");
  +                    sc.setVersion( version );
  +                    if( dbg>0 ) log( "Name only, end: " + startName + " " +
  +                                     endName);
  +                }
  +                return;
  +            }
  +
  +            cc=bytes[pos];
  +            pos++;
  +            if( cc==';' || cc==',' || pos>=end ) {
  +                if( ! isSpecial && startName!= endName ) {
  +                    sc=addCookie();
  +                    sc.getName().setBytes( bytes, startName,
  +                                           endName-startName );
  +                    sc.getValue().setString("");
  +                    sc.setVersion( version );
  +                    if( dbg>0 ) log( "Name only: " + startName + " " + endName);
  +                }
  +                continue;
  +            }
  +            
  +            // we should have "=" ( tested all other alternatives )
  +            int startValue=skipSpaces( bytes, pos, end);
  +            int endValue=startValue;
  +            
  +            // quote is valid only in version=1 cookies
  +            cc=bytes[pos];
  +            if( ( version == 1 || isSpecial ) && ( cc== '\'' || cc=='"' ) ) {
  +                startValue++;
  +                endValue=indexOf( bytes, startValue, end, cc );
  +                pos=endValue+1; // to skip to next cookie
  +             } else {
  +                endValue=findDelim2( bytes, startValue, end );
  +                pos=endValue+1;
  +            }
  +            
  +            // if not $Version, etc
  +            if( ! isSpecial ) {
  +                sc=addCookie();
  +                sc.getName().setBytes( bytes, startName, endName-startName );
  +                sc.getValue().setBytes( bytes, startValue, endValue-startValue);
  +                sc.setVersion( version );
  +                if( dbg>0 ) {
  +                    log( "New: " + sc.getName() + "X=X" + sc.getValue());
  +                }
  +                continue;
  +            }
  +            
  +            // special - Path, Version, Domain, Port
  +            if( dbg>0 ) log( "Special: " + startName + " " + endName);
  +            // XXX TODO
  +            if( equals( "$Version", bytes, startName, endName ) ) {
  +                if(dbg>0 ) log( "Found version " );
  +                if( bytes[startValue]=='1' && endValue==startValue+1 ) {
  +                    version=1;
  +                    if(dbg>0 ) log( "Found version=1" );
  +                }
  +                continue;
  +            }
  +            if( sc==null ) {
  +                // Path, etc without a previous cookie
  +                continue;
  +            }
  +            if( equals( "$Path", bytes, startName, endName ) ) {
  +                sc.getPath().setBytes( bytes,
  +                                       startValue,
  +                                       endValue-startValue );
  +            }
  +            if( equals( "$Domain", bytes, startName, endName ) ) {
  +                sc.getDomain().setBytes( bytes,
  +                                         startValue,
  +                                         endValue-startValue );
  +            }
  +            if( equals( "$Port", bytes, startName, endName ) ) {
  +                // sc.getPort().setBytes( bytes,
  +                //                        startValue,
  +                //                        endValue-startValue );
  +            }
  +        }
       }
   
       // -------------------- Utils --------------------
       public static int skipSpaces(  byte bytes[], int off, int end ) {
  -     while( off < end ) {
  -         byte b=bytes[off];
  -         if( b!= ' ' ) return off;
  -         off ++;
  -     }
  -     return off;
  +        while( off < end ) {
  +            byte b=bytes[off];
  +            if( b!= ' ' ) return off;
  +            off ++;
  +        }
  +        return off;
       }
   
       public static int findDelim1( byte bytes[], int off, int end )
       {
  -     while( off < end ) {
  -         byte b=bytes[off];
  -         if( b==' ' || b=='=' || b==';' || b==',' )
  -             return off;
  -         off++;
  -     }
  -     return off;
  +        while( off < end ) {
  +            byte b=bytes[off];
  +            if( b==' ' || b=='=' || b==';' || b==',' )
  +                return off;
  +            off++;
  +        }
  +        return off;
       }
   
       public static int findDelim2( byte bytes[], int off, int end )
       {
  -     while( off < end ) {
  -         byte b=bytes[off];
  -         if( b==';' || b==',' )
  -             return off;
  -         off++;
  -     }
  -     return off;
  +        while( off < end ) {
  +            byte b=bytes[off];
  +            if( b==';' || b==',' )
  +                return off;
  +            off++;
  +        }
  +        return off;
       }
   
       public static int indexOf( byte bytes[], int off, int end, byte qq )
       {
  -     while( off < end ) {
  -         byte b=bytes[off];
  -         if( b==qq )
  -             return off;
  -         off++;
  -     }
  -     return off;
  +        while( off < end ) {
  +            byte b=bytes[off];
  +            if( b==qq )
  +                return off;
  +            off++;
  +        }
  +        return off;
       }
   
       public static int indexOf( byte bytes[], int off, int end, char qq )
       {
  -     while( off < end ) {
  -         byte b=bytes[off];
  -         if( b==qq )
  -             return off;
  -         off++;
  -     }
  -     return off;
  +        while( off < end ) {
  +            byte b=bytes[off];
  +            if( b==qq )
  +                return off;
  +            off++;
  +        }
  +        return off;
       }
       
       // XXX will be refactored soon!
       public static boolean equals( String s, byte b[], int start, int end) {
  -     int blen = end-start;
  -     if (b == null || blen != s.length()) {
  -         return false;
  -     }
  -     int boff = start;
  -     for (int i = 0; i < blen; i++) {
  -         if (b[boff++] != s.charAt(i)) {
  -             return false;
  -         }
  -     }
  -     return true;
  +        int blen = end-start;
  +        if (b == null || blen != s.length()) {
  +            return false;
  +        }
  +        int boff = start;
  +        for (int i = 0; i < blen; i++) {
  +            if (b[boff++] != s.charAt(i)) {
  +                return false;
  +            }
  +        }
  +        return true;
       }
       
   
  @@ -364,35 +372,35 @@
       
       private void processCookieHeader(  String cookieString )
       {
  -     if( dbg>0 ) log( "Parsing cookie header " + cookieString );
  -     // normal cookie, with a string value.
  -     // This is the original code, un-optimized - it shouldn't
  -     // happen in normal case
  -
  -     StringTokenizer tok = new StringTokenizer(cookieString,
  -                                               ";", false);
  -     while (tok.hasMoreTokens()) {
  -         String token = tok.nextToken();
  -         int i = token.indexOf("=");
  -         if (i > -1) {
  -             
  -             // XXX
  -             // the trims here are a *hack* -- this should
  -             // be more properly fixed to be spec compliant
  -             
  -             String name = token.substring(0, i).trim();
  -             String value = token.substring(i+1, token.length()).trim();
  -             // RFC 2109 and bug 
  -             value=stripQuote( value );
  -             ServerCookie cookie = addCookie();
  -             
  -             cookie.getName().setString(name);
  -             cookie.getValue().setString(value);
  -             if( dbg > 0 ) log( "Add cookie " + name + "=" + value);
  -         } else {
  -             // we have a bad cookie.... just let it go
  -         }
  -     }
  +        if( dbg>0 ) log( "Parsing cookie header " + cookieString );
  +        // normal cookie, with a string value.
  +        // This is the original code, un-optimized - it shouldn't
  +        // happen in normal case
  +
  +        StringTokenizer tok = new StringTokenizer(cookieString,
  +                                                  ";", false);
  +        while (tok.hasMoreTokens()) {
  +            String token = tok.nextToken();
  +            int i = token.indexOf("=");
  +            if (i > -1) {
  +                
  +                // XXX
  +                // the trims here are a *hack* -- this should
  +                // be more properly fixed to be spec compliant
  +                
  +                String name = token.substring(0, i).trim();
  +                String value = token.substring(i+1, token.length()).trim();
  +                // RFC 2109 and bug 
  +                value=stripQuote( value );
  +                ServerCookie cookie = addCookie();
  +                
  +                cookie.getName().setString(name);
  +                cookie.getValue().setString(value);
  +                if( dbg > 0 ) log( "Add cookie " + name + "=" + value);
  +            } else {
  +                // we have a bad cookie.... just let it go
  +            }
  +        }
       }
   
       /**
  @@ -408,59 +416,59 @@
        */
       private static String stripQuote( String value )
       {
  -     //      log("Strip quote from " + value );
  -     if (((value.startsWith("\"")) && (value.endsWith("\""))) ||
  -         ((value.startsWith("'") && (value.endsWith("'"))))) {
  -         try {
  -             return value.substring(1,value.length()-1);
  -         } catch (Exception ex) { 
  -         }
  -     }
  -     return value;
  +        //        log("Strip quote from " + value );
  +        if (((value.startsWith("\"")) && (value.endsWith("\""))) ||
  +            ((value.startsWith("'") && (value.endsWith("'"))))) {
  +            try {
  +                return value.substring(1,value.length()-1);
  +            } catch (Exception ex) { 
  +            }
  +        }
  +        return value;
       }  
   
   
       // log
       static final int dbg=0;
       public void log(String s ) {
  -     System.out.println("Cookies: " + s);
  +        System.out.println("Cookies: " + s);
       }
   
       /*
       public static void main( String args[] ) {
  -     test("foo=bar; a=b");
  -     test("foo=bar;a=b");
  -     test("foo=bar;a=b;");
  -     test("foo=bar;a=b; ");
  -     test("foo=bar;a=b; ;");
  -     test("foo=;a=b; ;");
  -     test("foo;a=b; ;");
  -     // v1 
  -     test("$Version=1; foo=bar;a=b"); 
  +        test("foo=bar; a=b");
  +        test("foo=bar;a=b");
  +        test("foo=bar;a=b;");
  +        test("foo=bar;a=b; ");
  +        test("foo=bar;a=b; ;");
  +        test("foo=;a=b; ;");
  +        test("foo;a=b; ;");
  +        // v1 
  +        test("$Version=1; foo=bar;a=b"); 
           test("$Version=\"1\"; foo='bar'; $Path=/path; $Domain=\"localhost\"");
  -     test("$Version=1;foo=bar;a=b; ; ");
  -     test("$Version=1;foo=;a=b; ; ");
  -     test("$Version=1;foo= ;a=b; ; ");
  -     test("$Version=1;foo;a=b; ; ");
  -     test("$Version=1;foo=\"bar\";a=b; ; ");
  -     test("$Version=1;foo=\"bar\";$Path=/examples;a=b; ; ");
  -     test("$Version=1;foo=\"bar\";$Domain=apache.org;a=b");
  -     test("$Version=1;foo=\"bar\";$Domain=apache.org;a=b;$Domain=yahoo.com");
  -     // rfc2965
  -     test("$Version=1;foo=\"bar\";$Domain=apache.org;$Port=8080;a=b");
  +        test("$Version=1;foo=bar;a=b; ; ");
  +        test("$Version=1;foo=;a=b; ; ");
  +        test("$Version=1;foo= ;a=b; ; ");
  +        test("$Version=1;foo;a=b; ; ");
  +        test("$Version=1;foo=\"bar\";a=b; ; ");
  +        test("$Version=1;foo=\"bar\";$Path=/examples;a=b; ; ");
  +        test("$Version=1;foo=\"bar\";$Domain=apache.org;a=b");
  +        test("$Version=1;foo=\"bar\";$Domain=apache.org;a=b;$Domain=yahoo.com");
  +        // rfc2965
  +        test("$Version=1;foo=\"bar\";$Domain=apache.org;$Port=8080;a=b");
   
  -     // wrong
  -     test("$Version=1;foo=\"bar\";$Domain=apache.org;$Port=8080;a=b");
  +        // wrong
  +        test("$Version=1;foo=\"bar\";$Domain=apache.org;$Port=8080;a=b");
       }
   
       public static void test( String s ) {
  -     System.out.println("Processing " + s );
  -     Cookies cs=new Cookies(null);
  -     cs.processCookieHeader( s.getBytes(), 0, s.length());
  -     for( int i=0; i< cs.getCookieCount() ; i++ ) {
  -         System.out.println("Cookie: " + cs.getCookie( i ));
  -     }
  -         
  +        System.out.println("Processing " + s );
  +        Cookies cs=new Cookies(null);
  +        cs.processCookieHeader( s.getBytes(), 0, s.length());
  +        for( int i=0; i< cs.getCookieCount() ; i++ ) {
  +            System.out.println("Cookie: " + cs.getCookie( i ));
  +        }
  +            
       }
       */
   
  
  
  

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

Reply via email to