mrglavas    2004/10/06 13:08:28

  Modified:    java/src/org/apache/xerces/impl/dv/util HexBin.java
  Log:
  Fixing an AIOOBE. When validating content declared

  to be hexBinary we were throwing the exception if

  the value contained characters U+255 and above.
  
  Revision  Changes    Path
  1.12      +14 -9     xml-xerces/java/src/org/apache/xerces/impl/dv/util/HexBin.java
  
  Index: HexBin.java
  ===================================================================
  RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/dv/util/HexBin.java,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- HexBin.java       6 Oct 2004 14:56:52 -0000       1.11
  +++ HexBin.java       6 Oct 2004 20:08:28 -0000       1.12
  @@ -47,17 +47,19 @@
              hexNumberTable[i] = (byte) ( i-'a' + 10 );
           }
   
  -        for(int i = 0; i<10; i++ )
  +        for(int i = 0; i<10; i++ ) {
               lookUpHexAlphabet[i] = (char)('0'+i);
  -        for(int i = 10; i<=15; i++ )
  +        }
  +        for(int i = 10; i<=15; i++ ) {
               lookUpHexAlphabet[i] = (char)('A'+i -10);
  +        }
       }
   
       /**
        * Encode a byte array to hex string
        *
  -     * @param binaryData  array of byte to encode
  -     * @return return     encoded string
  +     * @param binaryData array of byte to encode
  +     * @return return encoded string
        */
       static public String encode(byte[] binaryData) {
           if (binaryData == null)
  @@ -79,8 +81,8 @@
       /**
        * Decode hex string to a byte array
        *
  -     * @param encoded  encoded string
  -     * @return return     array of byte to encode
  +     * @param encoded encoded string
  +     * @return return array of byte to encode
        */
       static public byte[] decode(String encoded) {
           if (encoded == null)
  @@ -93,11 +95,14 @@
           int lengthDecode = lengthData / 2;
           byte[] decodedData = new byte[lengthDecode];
           byte temp1, temp2;
  +        char tempChar;
           for( int i = 0; i<lengthDecode; i++ ){
  -            temp1 = hexNumberTable[binaryData[i*2]];
  +            tempChar = binaryData[i*2];
  +            temp1 = (tempChar < BASELENGTH) ? hexNumberTable[tempChar] : -1;
               if (temp1 == -1)
                   return null;
  -            temp2 = hexNumberTable[binaryData[i*2+1]];
  +            tempChar = binaryData[i*2+1];
  +            temp2 = (tempChar < BASELENGTH) ? hexNumberTable[tempChar] : -1;
               if (temp2 == -1)
                   return null;
               decodedData[i] = (byte)((temp1 << 4) | temp2);
  
  
  

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

Reply via email to