FYI, your mail client line wrapped the patch, rendering it useless to
patch.  Hopefully this is cleared up later in this thread, but I
don't see it checked in.  You can create a Bugzilla attachment
<http://nagoya.apache.org/bugzilla/>.

- Dan


"John Wilson" <[EMAIL PROTECTED]> writes:

> As the list seems to be eating attachments - here's the patch as a message:
>
>
>
> Index: src/java/org/apache/xmlrpc/Base64.java
> ===================================================================
> RCS file: /home/cvspublic/xml-rpc/src/java/org/apache/xmlrpc/Base64.java,v
> retrieving revision 1.2
> diff -u -r1.2 Base64.java
> --- src/java/org/apache/xmlrpc/Base64.java 19 Feb 2002 02:25:01 -0000 1.2
> +++ src/java/org/apache/xmlrpc/Base64.java 9 Mar 2002 21:57:12 -0000
> @@ -1,9 +1,9 @@
>  package org.apache.xmlrpc;
>
>  /*
> - * $Header:
> /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/util/Bas
> e64.java,v 1.4 2001/09/04 21:49:55 craigmcc Exp $
> - * $Revision: 1.4 $
> - * $Date: 2001/09/04 21:49:55 $
> + * $Header:
> /home/cvspublic/xml-rpc/src/java/org/apache/xmlrpc/Base64.java,v 1.2
> 2002/02/19 02:25:01 jon Exp $
> + * $Revision: 1.2 $
> + * $Date: 2002/02/19 02:25:01 $
>   *
>   * ====================================================================
>   *
> @@ -70,253 +70,140 @@
>   * Multipurpose Internet Mail Extensions (MIME) Part One: Format of
>   * Internet Message Bodies. Reference 1996
>   *
> - * @author Jeffrey Rodriguez
> - * @version $Id: Base64.java,v 1.4 2001/09/04 21:49:55 craigmcc Exp $
> + * @author John Wilson ([EMAIL PROTECTED])
> + * @version $Id: Base64.java,v 1.2 2002/02/19 02:25:01 jon Exp $
>   */
> -public final class  Base64
> -{
> -    static private final int  BASELENGTH         = 255;
> -    static private final int  LOOKUPLENGTH       = 64;
> -    static private final int  TWENTYFOURBITGROUP = 24;
> -    static private final int  EIGHTBIT           = 8;
> -    static private final int  SIXTEENBIT         = 16;
> -    static private final int  SIXBIT             = 6;
> -    static private final int  FOURBYTE           = 4;
> -    static private final int  SIGN               = -128;
> -    static private final byte PAD                = (byte) '=';
> -    static private byte [] base64Alphabet       = new byte[BASELENGTH];
> -    static private byte [] lookUpBase64Alphabet = new byte[LOOKUPLENGTH];
> -    //static private final Log log =
> LogSource.getInstance("org.apache.commons.util.Base64");
> -
> -    static
> -    {
> -        for (int i = 0; i < BASELENGTH; i++ )
> -        {
> -            base64Alphabet[i] = -1;
> -        }
> -        for (int i = 'Z'; i >= 'A'; i--)
> -        {
> -            base64Alphabet[i] = (byte) (i - 'A');
> -        }
> -        for (int i = 'z'; i>= 'a'; i--)
> -        {
> -            base64Alphabet[i] = (byte) (i - 'a' + 26);
> -        }
> -        for (int i = '9'; i >= '0'; i--)
> -        {
> -            base64Alphabet[i] = (byte) (i - '0' + 52);
> -        }
> -
> -        base64Alphabet['+']  = 62;
> -        base64Alphabet['/']  = 63;
> -
> -        for (int i = 0; i <= 25; i++ )
> -            lookUpBase64Alphabet[i] = (byte) ('A' + i);
> -
> -        for (int i = 26,  j = 0; i <= 51; i++, j++ )
> -            lookUpBase64Alphabet[i] = (byte) ('a'+ j);
> -
> -        for (int i = 52,  j = 0; i <= 61; i++, j++ )
> -            lookUpBase64Alphabet[i] = (byte) ('0' + j);
> -
> -        lookUpBase64Alphabet[62] = (byte) '+';
> -        lookUpBase64Alphabet[63] = (byte) '/';
> -    }
> -
> -    public static boolean isBase64( String isValidString )
> -    {
> -        return isArrayByteBase64(isValidString.getBytes());
> -    }
> -
> -    public static boolean isBase64( byte octect )
> -    {
> -        //shall we ignore white space? JEFF??
> -        return (octect == PAD || base64Alphabet[octect] != -1);
> -    }
> -
> -    public static boolean isArrayByteBase64( byte[] arrayOctect )
> -    {
> -        int length = arrayOctect.length;
> -        if (length == 0)
> -        {
> -            // shouldn't a 0 length array be valid base64 data?
> -            // return false;
> -            return true;
> -        }
> -        for (int i=0; i < length; i++)
> -        {
> -            if ( !Base64.isBase64(arrayOctect[i]) )
> -                return false;
> -        }
> -        return true;
> -    }
> -
> -    /**
> -     * Encodes hex octects into Base64.
> -     *
> -     * @param binaryData Array containing binary data to encode.
> -     * @return Base64-encoded data.
> -     */
> -    public static byte[] encode( byte[] binaryData )
> -    {
> -        int      lengthDataBits    = binaryData.length*EIGHTBIT;
> -        int      fewerThan24bits   = lengthDataBits%TWENTYFOURBITGROUP;
> -        int      numberTriplets    = lengthDataBits/TWENTYFOURBITGROUP;
> -        byte     encodedData[]     = null;
> -
> -
> -        if (fewerThan24bits != 0)
> -        {
> -            //data not divisible by 24 bit
> -            encodedData = new byte[ (numberTriplets + 1 ) * 4 ];
> -        }
> -        else
> -        {
> -            // 16 or 8 bit
> -            encodedData = new byte[ numberTriplets * 4 ];
> -        }
> -
> -        byte k = 0, l = 0, b1 = 0, b2 = 0, b3 = 0;
> -
> -        int encodedIndex = 0;
> -        int dataIndex   = 0;
> -        int i           = 0;
> -        //log.debug("number of triplets = " + numberTriplets);
> -        for ( i = 0; i<numberTriplets; i++ )
> -        {
> -            dataIndex = i*3;
> -            b1 = binaryData[dataIndex];
> -            b2 = binaryData[dataIndex + 1];
> -            b3 = binaryData[dataIndex + 2];
> -
> -            //log.debug("b1= " + b1 +", b2= " + b2 + ", b3= " + b3);
> -
> -            l  = (byte)(b2 & 0x0f);
> -            k  = (byte)(b1 & 0x03);
> -
> -            encodedIndex = i * 4;
> -            byte val1 = ((b1 &
> SIGN)==0)?(byte)(b1>>2):(byte)((b1)>>2^0xc0);
> -            byte val2 = ((b2 &
> SIGN)==0)?(byte)(b2>>4):(byte)((b2)>>4^0xf0);
> -            byte val3 = ((b3 &
> SIGN)==0)?(byte)(b3>>6):(byte)((b3)>>6^0xfc);
> -
> -            encodedData[encodedIndex]   = lookUpBase64Alphabet[ val1 ];
> -            //log.debug( "val2 = " + val2 );
> -            //log.debug( "k4   = " + (k<<4) );
> -            //log.debug(  "vak  = " + (val2 | (k<<4)) );
> -            encodedData[encodedIndex+1] =
> -                lookUpBase64Alphabet[ val2 | ( k<<4 )];
> -            encodedData[encodedIndex+2] =
> -                lookUpBase64Alphabet[ (l <<2 ) | val3 ];
> -            encodedData[encodedIndex+3] = lookUpBase64Alphabet[ b3 &
> 0x3f ];
> -        }
> -
> -        // form integral number of 6-bit groups
> -        dataIndex    = i*3;
> -        encodedIndex = i*4;
> -        if (fewerThan24bits == EIGHTBIT )
> -        {
> -            b1 = binaryData[dataIndex];
> -            k = (byte) ( b1 &0x03 );
> -            //log.debug("b1=" + b1);
> -            //log.debug("b1<<2 = " + (b1>>2) );
> -            byte val1 = ((b1 &
> SIGN)==0)?(byte)(b1>>2):(byte)((b1)>>2^0xc0);
> -            encodedData[encodedIndex]     = lookUpBase64Alphabet[ val1 ];
> -            encodedData[encodedIndex + 1] = lookUpBase64Alphabet[ k<<4 ];
> -            encodedData[encodedIndex + 2] = PAD;
> -            encodedData[encodedIndex + 3] = PAD;
> -        }
> -        else if (fewerThan24bits == SIXTEENBIT)
> -        {
> -
> -            b1 = binaryData[dataIndex];
> -            b2 = binaryData[dataIndex +1 ];
> -            l = (byte) (b2 & 0x0f);
> -            k = (byte) (b1 & 0x03);
> -
> -            byte val1 = ((b1 & SIGN) ==
> 0)?(byte)(b1>>2):(byte)((b1)>>2^0xc0);
> -            byte val2 = ((b2 & SIGN) ==
> 0)?(byte)(b2>>4):(byte)((b2)>>4^0xf0);
> -
> -            encodedData[encodedIndex]     = lookUpBase64Alphabet[ val1 ];
> -            encodedData[encodedIndex + 1] =
> -                lookUpBase64Alphabet[ val2 | ( k<<4 )];
> -            encodedData[encodedIndex + 2] = lookUpBase64Alphabet[ l<<2 ];
> -            encodedData[encodedIndex + 3] = PAD;
> -        }
> -
> -        return encodedData;
> -    }
> -
> -    /**
> -     * Decodes Base64 data into octects
> -     *
> -     * @param binaryData Byte array containing Base64 data
> -     * @return Array containing decoded data.
> -     */
> -    public static byte[] decode( byte[] base64Data )
> -    {
> -        // handle the edge case, so we don't have to worry about it later
> -        if(base64Data.length == 0) { return new byte[0]; }
> -
> -        int      numberQuadruple    = base64Data.length/FOURBYTE;
> -        byte     decodedData[]      = null;
> -        byte     b1=0,b2=0,b3=0, b4=0, marker0=0, marker1=0;
> -
> -        // Throw away anything not in base64Data
> -
> -        int encodedIndex = 0;
> -        int dataIndex    = 0;
> -        {
> -            // this sizes the output array properly - rlw
> -            int lastData = base64Data.length;
> -            // ignore the '=' padding
> -            while (base64Data[lastData-1] == PAD)
> -            {
> -                if (--lastData == 0)
> -                {
> -                    return new byte[0];
> -                }
> -            }
> -            decodedData = new byte[ lastData - numberQuadruple ];
> -        }
> -
> -        for (int i = 0; i < numberQuadruple; i++)
> -        {
> -            dataIndex = i * 4;
> -            marker0   = base64Data[dataIndex + 2];
> -            marker1   = base64Data[dataIndex + 3];
> -
> -            b1 = base64Alphabet[base64Data[dataIndex]];
> -            b2 = base64Alphabet[base64Data[dataIndex +1]];
> -
> -            if (marker0 != PAD && marker1 != PAD)
> -            {
> -                //No PAD e.g 3cQl
> -                b3 = base64Alphabet[ marker0 ];
> -                b4 = base64Alphabet[ marker1 ];
> -
> -                decodedData[encodedIndex]   = (byte)(  b1 <<2 | b2>>4 ) ;
> -                decodedData[encodedIndex + 1] =
> -                    (byte)(((b2 & 0xf)<<4 ) |( (b3>>2) & 0xf) );
> -                decodedData[encodedIndex + 2] = (byte)( b3<<6 | b4 );
> -            }
> -            else if (marker0 == PAD)
> -            {
> -                //Two PAD e.g. 3c[Pad][Pad]
> -                decodedData[encodedIndex]   = (byte)(  b1 <<2 | b2>>4 ) ;
> -            }
> -            else if (marker1 == PAD)
> -            {
> -                //One PAD e.g. 3cQ[Pad]
> -                b3 = base64Alphabet[ marker0 ];
> -
> -                decodedData[encodedIndex]   = (byte)(  b1 <<2 | b2>>4 );
> -                decodedData[encodedIndex + 1] =
> -                    (byte)(((b2 & 0xf)<<4 ) |( (b3>>2) & 0xf) );
> -            }
> -            encodedIndex += 3;
> -        }
> -        return decodedData;
> -    }
> -
> -
> +public final class Base64 {
> +  private static final char[] tTable =
> "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".toCharAr
> ray();
> +  private static final byte[] translateTable = (
> +                                          //
> +
> "\u0042\u0042\u0042\u0042\u0042\u0042\u0042\u0042"
> +                                          //                    \t    \n
> \r
> +                                              +
> "\u0042\u0042\u0041\u0041\u0042\u0042\u0041\u0042"
> +                                          //
> +                                              +
> "\u0042\u0042\u0042\u0042\u0042\u0042\u0042\u0042"
> +                                          //
> +                                              +
> "\u0042\u0042\u0042\u0042\u0042\u0042\u0042\u0042"
> +                                          //        sp    !     "     #
> $     %     &     '
> +                                              +
> "\u0041\u0042\u0042\u0042\u0042\u0042\u0042\u0042"
> +                                          //         (    )     *     +
> ,     -     .     /
> +                                              +
> "\u0042\u0042\u0042\u003E\u0042\u0042\u0042\u003F"
> +                                          //         0    1     2     3
> 4     5     6     7
> +                                              +
> "\u0034\u0035\u0036\u0037\u0038\u0039\u003A\u003B"
> +                                          //         8    9     :     ;
> <     =     >     ?
> +                                              +
> "\u003C\u003D\u0042\u0042\u0042\u0040\u0042\u0042"
> +                                          //         @    A     B     C
> D     E     F     G
> +                                              +
> "\u0042\u0000\u0001\u0002\u0003\u0004\u0005\u0006"
> +                                          //         H    I   J K   L     M
> N   O
> +                                              +
> "\u0007\u0008\t\n\u000B\u000C\r\u000E"
> +                                          //         P    Q     R     S
>  T     U     V    W
> +                                              +
> "\u000F\u0010\u0011\u0012\u0013\u0014\u0015\u0016"
> +                                          //         X    Y     Z
> [     \     ]     ^    _
> +                                              +
> "\u0017\u0018\u0019\u0042\u0042\u0042\u0042\u0042"
> +                                          //         '    a     b     c
> d     e     f     g
> +                                              +
> "\u0042\u001A\u001B\u001C\u001D\u001E\u001F\u0020"
> +                                          //        h   i   j     k     l
> m     n     o    p
> +                                              +
> "\u0021\"\u0023\u0024\u0025\u0026\u0027\u0028"
> +                                          //        p     q     r     s
> t     u     v     w
> +                                              +
> "\u0029\u002A\u002B\u002C\u002D\u002E\u002F\u0030"
> +                                          //        x     y     z
> +                                              +
> "\u0031\u0032\u0033").getBytes();
> +
> +  /**
> +   * Encodes hex octects into Base64.
> +   *
> +   * @param binaryData Array containing binary data to encode.
> +   * @return Base64-encoded data.
> +   */
> +  public static char[] encode(final byte[] binaryData) {
> +  final int numChars = ((binaryData.length + 2) / 3) * 4;
> +  final int dLimit = (binaryData.length / 3) * 3;
> +  final char[] buf = new char[numChars + 2 + (binaryData.length / 54)];
> +  int bIndex = 1;
> +  int byteCount = 0;
> +
> +    buf[0] = '\n';
> +
> +    for (int dIndex = 0; dIndex != dLimit; dIndex += 3) {
> +    final int d = ((binaryData[dIndex] & 0XFF) << 16) |
> +                  ((binaryData[dIndex + 1] & 0XFF) << 8) |
> +                  (binaryData[dIndex + 2] & 0XFF);
> +
> +      buf[bIndex++] =  tTable[d >> 18];
> +      buf[bIndex++] =  tTable[(d >> 12) & 0X3F];
> +      buf[bIndex++] =  tTable[(d >> 6) & 0X3F];
> +      buf[bIndex++] =  tTable[d & 0X3F];
> +
> +      if (++byteCount == 18) {
> +        buf[bIndex++] = '\n';
> +        byteCount = 0;
> +      }
> +    }
> +
> +    if (dLimit != binaryData.length) {
> +    int d = (binaryData[dLimit] & 0XFF) << 16;
> +
> +      if (dLimit + 1 != binaryData.length) {
> +        d |= (binaryData[dLimit + 1] & 0XFF) << 8;
> +      }
> +
> +      buf[bIndex++] =  tTable[d >> 18];
> +      buf[bIndex++] =  tTable[(d >> 12) & 0X3F];
> +      buf[bIndex++] =  (dLimit + 1 < binaryData.length) ? tTable[(d >> 6) &
> 0X3F] : '=';
> +      buf[bIndex++] =  '=';
> +    }
> +
> +    buf[bIndex] = '\n';
> +
> +    return buf;
> +  }
> +
> +  /**
> +   * Decodes Base64 binaryData into octects
> +   *
> +   * @param binarybinaryData Byte array containing Base64 binaryData
> +   * @return Array containing decoded binaryData.
> +   */
> +  public static byte[] decode(final StringBuffer base64Data) {
> +  final byte[] bytes = new byte[((base64Data.length() + 3) / 4) * 3];
> +  int bytesIndex = 0;
> +  int byteShift = 4;
> +  int tmp = 0;
> +  int sixBit = 0;
> +  boolean gotEquals = false;
> +
> +    for (int i = 0; i != base64Data.length(); i++) {
> +    final char c = base64Data.charAt(i);
> +
> +     sixBit = (c < translateTable.length) ? translateTable[c] : 66;
> +
> +      if (sixBit < 64) {
> +        if (gotEquals) throw new Error("= character not at end of base64
> value");
> +
> +        tmp = (tmp << 6) | sixBit;
> +
> +        if (byteShift-- != 4)
> +          bytes[bytesIndex++] = (byte)(tmp >> (byteShift * 2));
> +
> +      } else if (sixBit == 64) {
> +        byteShift--;
> +        gotEquals = true;
> +
> +      } else if (sixBit == 66) {
> +        throw new Error("bad character \'" + c + "\' in base64 value");
> +      }
> +
> +      if (byteShift == 0) byteShift = 4;
> +  }
> +
> +    if (byteShift != 4) throw new Error("wrong number of = characters at
> end of base64 value");
> +
> +    if (bytes.length == bytesIndex) return bytes;
> +
> +    final byte[] t = new byte[bytesIndex];
> +
> +    System.arraycopy(bytes, 0, t, 0, bytesIndex);
> +
> +    return t;
> +  }
>  }
> Index: src/java/org/apache/xmlrpc/WebServer.java
> ===================================================================
> RCS file:
> /home/cvspublic/xml-rpc/src/java/org/apache/xmlrpc/WebServer.java,v
> retrieving revision 1.9
> diff -u -r1.9 WebServer.java
> --- src/java/org/apache/xmlrpc/WebServer.java 6 Mar 2002 15:52:56 -0000 1.9
> +++ src/java/org/apache/xmlrpc/WebServer.java 9 Mar 2002 21:57:15 -0000
> @@ -640,7 +640,7 @@
>              try
>              {
>                  byte[] c =
> -                        Base64.decode (line.substring(21).getBytes());
> +                        Base64.decode(new
> StringBuffer(line.substring(21)));
>                  String str = new String (c);
>                  int col = str.indexOf (':');
>                  user = str.substring (0, col);
> Index: src/java/org/apache/xmlrpc/XmlRpc.java
> ===================================================================
> RCS file: /home/cvspublic/xml-rpc/src/java/org/apache/xmlrpc/XmlRpc.java,v
> retrieving revision 1.21
> diff -u -r1.21 XmlRpc.java
> --- src/java/org/apache/xmlrpc/XmlRpc.java 8 Mar 2002 05:19:29 -0000 1.21
> +++ src/java/org/apache/xmlrpc/XmlRpc.java 9 Mar 2002 21:57:18 -0000
> @@ -389,7 +389,7 @@
>          // finalize character data, if appropriate
>          if (currentValue != null && readCdata)
>          {
> -            currentValue.characterData (cdata.toString ());
> +            currentValue.characterData (cdata);
>              cdata.setLength (0);
>              readCdata = false;
>          }
> @@ -587,39 +587,39 @@
>           * Set the character data for the element and interpret it
>           * according to the element type.
>           */
> -        public void characterData (String cdata)
> +        public void characterData (StringBuffer cdata)
>          {
>              switch (type)
>              {
>                  case INTEGER:
> -                    value = new Integer (cdata.trim ());
> +                    value = new Integer(cdata.toString().trim());
>                      break;
>                  case BOOLEAN:
> -                    value = ("1".equals (cdata.trim ()) ?
> +                    value = ("1".equals(cdata.toString().trim()) ?
>                               Boolean.TRUE : Boolean.FALSE);
>                      break;
>                  case DOUBLE:
> -                    value = new Double (cdata.trim ());
> +                    value = new Double(cdata.toString().trim());
>                      break;
>                  case DATE:
>                      try
>                      {
> -                        value = dateformat.parse (cdata.trim ());
> +                        value = dateformat.parse(cdata.toString().trim());
>                      }
>                      catch (ParseException p)
>                      {
> -                        throw new RuntimeException (p.getMessage ());
> +                        throw new RuntimeException(p.getMessage());
>                      }
>                      break;
>                  case BASE64:
> -                    value = Base64.decode (cdata.getBytes());
> +                    value = Base64.decode(cdata);
>                      break;
>                  case STRING:
> -                    value = cdata;
> +                    value = cdata.toString();
>                      break;
>                  case STRUCT:
>                      // this is the name to use for the next member of this
> struct
> -                    nextMemberName = cdata;
> +                    nextMemberName = cdata.toString();
>                      break;
>              }
>          }
> Index: src/java/org/apache/xmlrpc/applet/SimpleXmlRpcClient.java
> ===================================================================
> RCS file:
> /home/cvspublic/xml-rpc/src/java/org/apache/xmlrpc/applet/SimpleXmlRpcClient
> .java,v
> retrieving revision 1.3
> diff -u -r1.3 SimpleXmlRpcClient.java
> --- src/java/org/apache/xmlrpc/applet/SimpleXmlRpcClient.java 8 Mar 2002
> 04:41:53 -0000 1.3
> +++ src/java/org/apache/xmlrpc/applet/SimpleXmlRpcClient.java 9 Mar 2002
> 21:57:22 -0000
> @@ -330,7 +330,7 @@
>          // finalize character data, if appropriate
>          if (currentValue != null && readCdata)
>          {
> -            currentValue.characterData (cdata.toString ());
> +            currentValue.characterData(cdata);
>              cdata.setLength (0);
>              readCdata = false;
>          }
> @@ -518,39 +518,39 @@
>            * Set the character data for the element and interpret it
> according to the
>            * element type
>            */
> -        public void characterData (String cdata)
> +        public void characterData (StringBuffer cdata)
>          {
>              switch (type)
>              {
>                  case INTEGER:
> -                    value = new Integer (cdata.trim ());
> +                    value = new Integer (cdata.toString().trim());
>                      break;
>                  case BOOLEAN:
> -                    value = new Boolean ("1".equals (cdata.trim ()));
> +                    value = new Boolean ("1".equals
> (cdata.toString().trim()));
>                      break;
>                  case DOUBLE:
> -                    value = new Double (cdata.trim ());
> +                    value = new Double (cdata.toString().trim());
>                      break;
>                  case DATE:
>                      try
>                      {
> -                        value = format.parse (cdata.trim ());
> +                        value = format.parse (cdata.toString().trim());
>                      }
>                      catch (ParseException p)
>                      {
>                          // System.err.println ("Exception while parsing
> date: "+p);
> -                        throw new RuntimeException (p.getMessage ());
> +                        throw new RuntimeException (p.getMessage());
>                      }
>                      break;
>                  case BASE64:
> -                    value = Base64.decode(cdata.getBytes());
> +                    value = Base64.decode(cdata);
>                      break;
>                  case STRING:
> -                    value = cdata;
> +                    value = cdata.toString();
>                      break;
>                  case STRUCT:
>                      // this is the name to use for the next member of this
> struct
> -                    nextMemberName = cdata;
> +                    nextMemberName = cdata.toString();
>                      break;
>              }
>          }

Reply via email to