You are viewing a plain text version of this content. The canonical link for it is here.
Posted to j-dev@xerces.apache.org by "Venkat Ganesh (JIRA)" <xe...@xml.apache.org> on 2006/12/28 00:02:20 UTC

[jira] Created: (XERCESJ-1222) Base64 encode/decode bug using xerces-2_9_0 while processing binary files.

Base64 encode/decode bug using xerces-2_9_0 while processing binary files. 
---------------------------------------------------------------------------

                 Key: XERCESJ-1222
                 URL: http://issues.apache.org/jira/browse/XERCESJ-1222
             Project: Xerces2-J
          Issue Type: Bug
    Affects Versions: 2.9.0
         Environment: Microsoft Windows XP [Version 5.1.2600]
            Reporter: Venkat Ganesh


Hi, 

The program Base64EncodeDecode.java shown below, is using org.apache.xerces.impl.dv.util.Base64 class for base64 encode/decode. It works well with ASCII files. However, it fails with binary files. 

Thanks. 

Testing.
======
Make sure xerces jar files are in the classpath. 

Testing with ASCII files. 
==================
Encode a text file as shown below: 

java Base64EncodeDecode encode foo.xml foo_encoded.xml

Decode the encoded file as shown below: 
java Base64EncodeDecode decode foo_encoded.xml foo_decoded.xml

Verified foo.xml and foo_decoded.xml are identical, as expected. 

Testing with binary files. 
==================
Encode a binary file as shown below: 
java Base64EncodeDecode encode procexp.exe procexp_encoded.exe

Decode the encoded file as shown below: 
java Base64EncodeDecode decode procexp_encoded.exe procexp_decoded.exe

Verify you cannot double click and open the decoded exe file. You will see the error message that the decoded exe file is not a valid Win32 application even though the original executable (procexp.exe) is a valid executable. The number of bytes and size of the original and decoded executables are same; however, the third byte in procexp.exe is ox90 while it is 0x3f in the procexp_decoded.exe, when viewed using a hex editor. There are many more differences. 

I am able to reproduce this issue with xerces-2_9_0 as well as xerces-2_7_1 jar files. Is this a known bug? 

How to encode/decode binary files using xerces jar files? 

Thanks and regards, 

V.Ganesh

venkat_ganesh43016@yahoo.com 

Base64EncodeDecode.java 
======================

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.xerces.impl.dv.util.Base64;

public class Base64EncodeDecode {
    public static void main(String[] args) throws IOException {
        if ( args.length != 3 )
        {
            System.out.println("Usage java Base64EncodeDecode encode|decode <input-file-name> <output-file-name>");
            System.out.println("You can use this program to encode binary files also.");
            return;
        }
        StringBuffer sb=new StringBuffer(10000);
        FileInputStream inFile = null;
        FileOutputStream outFile = null;
        try {
            inFile = new FileInputStream(args[1]);
            outFile = new FileOutputStream(args[2]);
            int byteRead=0;
            int ctr=0;
            int numberOfChars=0;
            while ((byteRead = inFile.read()) != -1) {
               sb.append((char ) byteRead);
               numberOfChars++;
            }
            if ( args[0].equalsIgnoreCase("encode") == true )
            {
                String tmpString=sb.toString();
                String outString=Base64.encode(tmpString.getBytes());
                if ( outString == null )
                {
                  System.out.println("Failed- Not able to encode. ");
                } else {
                  outFile.write(outString.getBytes());
                }
            } else {
                String tmpString=sb.toString();
                byte outByteArray[] =Base64.decode(tmpString);
                if ( outByteArray == null )
                {
                  System.out.println("Failed- Not able to decode. ");
                } else {
                  outFile.write(outByteArray);
                }
            }
        } finally {
            if (inFile != null) {
                inFile.close();
            }
            if (outFile != null) {
                outFile.close();
            }
        }
    }
}



-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

---------------------------------------------------------------------
To unsubscribe, e-mail: j-dev-unsubscribe@xerces.apache.org
For additional commands, e-mail: j-dev-help@xerces.apache.org


[jira] Updated: (XERCESJ-1222) Base64 encode/decode bug using xerces-2_9_0 while processing binary files.

Posted by "Venkat Ganesh (JIRA)" <xe...@xml.apache.org>.
     [ http://issues.apache.org/jira/browse/XERCESJ-1222?page=all ]

Venkat Ganesh updated XERCESJ-1222:
-----------------------------------

    Attachment: Base64EncodeDecode.java

The java program that can be used for reproducing this bug. 

> Base64 encode/decode bug using xerces-2_9_0 while processing binary files.
> --------------------------------------------------------------------------
>
>                 Key: XERCESJ-1222
>                 URL: http://issues.apache.org/jira/browse/XERCESJ-1222
>             Project: Xerces2-J
>          Issue Type: Bug
>    Affects Versions: 2.9.0
>         Environment: Microsoft Windows XP [Version 5.1.2600]
>            Reporter: Venkat Ganesh
>         Attachments: Base64EncodeDecode.java
>
>
> Hi, 
> The program Base64EncodeDecode.java shown below, is using org.apache.xerces.impl.dv.util.Base64 class for base64 encode/decode. It works well with ASCII files. However, it fails with binary files. 
> Thanks. 
> Testing.
> ======
> Make sure xerces jar files are in the classpath. 
> Testing with ASCII files. 
> ==================
> Encode a text file as shown below: 
> java Base64EncodeDecode encode foo.xml foo_encoded.xml
> Decode the encoded file as shown below: 
> java Base64EncodeDecode decode foo_encoded.xml foo_decoded.xml
> Verified foo.xml and foo_decoded.xml are identical, as expected. 
> Testing with binary files. 
> ==================
> Encode a binary file as shown below: 
> java Base64EncodeDecode encode procexp.exe procexp_encoded.exe
> Decode the encoded file as shown below: 
> java Base64EncodeDecode decode procexp_encoded.exe procexp_decoded.exe
> Verify you cannot double click and open the decoded exe file. You will see the error message that the decoded exe file is not a valid Win32 application even though the original executable (procexp.exe) is a valid executable. The number of bytes and size of the original and decoded executables are same; however, the third byte in procexp.exe is ox90 while it is 0x3f in the procexp_decoded.exe, when viewed using a hex editor. There are many more differences. 
> I am able to reproduce this issue with xerces-2_9_0 as well as xerces-2_7_1 jar files. Is this a known bug? 
> How to encode/decode binary files using xerces jar files? 
> Thanks and regards, 
> V.Ganesh
> venkat_ganesh43016@yahoo.com 
> Base64EncodeDecode.java 
> ======================
> import java.io.FileInputStream;
> import java.io.FileOutputStream;
> import java.io.IOException;
> import org.apache.xerces.impl.dv.util.Base64;
> public class Base64EncodeDecode {
>     public static void main(String[] args) throws IOException {
>         if ( args.length != 3 )
>         {
>             System.out.println("Usage java Base64EncodeDecode encode|decode <input-file-name> <output-file-name>");
>             System.out.println("You can use this program to encode binary files also.");
>             return;
>         }
>         StringBuffer sb=new StringBuffer(10000);
>         FileInputStream inFile = null;
>         FileOutputStream outFile = null;
>         try {
>             inFile = new FileInputStream(args[1]);
>             outFile = new FileOutputStream(args[2]);
>             int byteRead=0;
>             int ctr=0;
>             int numberOfChars=0;
>             while ((byteRead = inFile.read()) != -1) {
>                sb.append((char ) byteRead);
>                numberOfChars++;
>             }
>             if ( args[0].equalsIgnoreCase("encode") == true )
>             {
>                 String tmpString=sb.toString();
>                 String outString=Base64.encode(tmpString.getBytes());
>                 if ( outString == null )
>                 {
>                   System.out.println("Failed- Not able to encode. ");
>                 } else {
>                   outFile.write(outString.getBytes());
>                 }
>             } else {
>                 String tmpString=sb.toString();
>                 byte outByteArray[] =Base64.decode(tmpString);
>                 if ( outByteArray == null )
>                 {
>                   System.out.println("Failed- Not able to decode. ");
>                 } else {
>                   outFile.write(outByteArray);
>                 }
>             }
>         } finally {
>             if (inFile != null) {
>                 inFile.close();
>             }
>             if (outFile != null) {
>                 outFile.close();
>             }
>         }
>     }
> }

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

---------------------------------------------------------------------
To unsubscribe, e-mail: j-dev-unsubscribe@xerces.apache.org
For additional commands, e-mail: j-dev-help@xerces.apache.org


[jira] Resolved: (XERCESJ-1222) Base64 encode/decode bug using xerces-2_9_0 while processing binary files.

Posted by "Michael Glavassevich (JIRA)" <xe...@xml.apache.org>.
     [ http://issues.apache.org/jira/browse/XERCESJ-1222?page=all ]

Michael Glavassevich resolved XERCESJ-1222.
-------------------------------------------

    Resolution: Invalid

Base64 is an internal class which exists support the XML schema type: base64Binary [1].  While you can try using it for other purposes, it's not supported.  That said, the problem you're having is more likely an issue with the conversions you're doing between bytes and chars (the widening an narrowing conversions of casting byte to char and assuming whatever the platform default encoding is okay when you call getBytes()).

[1] http://www.w3.org/TR/xmlschema-2/#base64Binary

> Base64 encode/decode bug using xerces-2_9_0 while processing binary files.
> --------------------------------------------------------------------------
>
>                 Key: XERCESJ-1222
>                 URL: http://issues.apache.org/jira/browse/XERCESJ-1222
>             Project: Xerces2-J
>          Issue Type: Bug
>    Affects Versions: 2.9.0
>         Environment: Microsoft Windows XP [Version 5.1.2600]
>            Reporter: Venkat Ganesh
>         Attachments: Base64EncodeDecode.java
>
>
> Hi, 
> The program Base64EncodeDecode.java shown below, is using org.apache.xerces.impl.dv.util.Base64 class for base64 encode/decode. It works well with ASCII files. However, it fails with binary files. 
> Thanks. 
> Testing.
> ======
> Make sure xerces jar files are in the classpath. 
> Testing with ASCII files. 
> ==================
> Encode a text file as shown below: 
> java Base64EncodeDecode encode foo.xml foo_encoded.xml
> Decode the encoded file as shown below: 
> java Base64EncodeDecode decode foo_encoded.xml foo_decoded.xml
> Verified foo.xml and foo_decoded.xml are identical, as expected. 
> Testing with binary files. 
> ==================
> Encode a binary file as shown below: 
> java Base64EncodeDecode encode procexp.exe procexp_encoded.exe
> Decode the encoded file as shown below: 
> java Base64EncodeDecode decode procexp_encoded.exe procexp_decoded.exe
> Verify you cannot double click and open the decoded exe file. You will see the error message that the decoded exe file is not a valid Win32 application even though the original executable (procexp.exe) is a valid executable. The number of bytes and size of the original and decoded executables are same; however, the third byte in procexp.exe is ox90 while it is 0x3f in the procexp_decoded.exe, when viewed using a hex editor. There are many more differences. 
> I am able to reproduce this issue with xerces-2_9_0 as well as xerces-2_7_1 jar files. Is this a known bug? 
> How to encode/decode binary files using xerces jar files? 
> Thanks and regards, 
> V.Ganesh
> venkat_ganesh43016@yahoo.com 
> Base64EncodeDecode.java 
> ======================
> import java.io.FileInputStream;
> import java.io.FileOutputStream;
> import java.io.IOException;
> import org.apache.xerces.impl.dv.util.Base64;
> public class Base64EncodeDecode {
>     public static void main(String[] args) throws IOException {
>         if ( args.length != 3 )
>         {
>             System.out.println("Usage java Base64EncodeDecode encode|decode <input-file-name> <output-file-name>");
>             System.out.println("You can use this program to encode binary files also.");
>             return;
>         }
>         StringBuffer sb=new StringBuffer(10000);
>         FileInputStream inFile = null;
>         FileOutputStream outFile = null;
>         try {
>             inFile = new FileInputStream(args[1]);
>             outFile = new FileOutputStream(args[2]);
>             int byteRead=0;
>             int ctr=0;
>             int numberOfChars=0;
>             while ((byteRead = inFile.read()) != -1) {
>                sb.append((char ) byteRead);
>                numberOfChars++;
>             }
>             if ( args[0].equalsIgnoreCase("encode") == true )
>             {
>                 String tmpString=sb.toString();
>                 String outString=Base64.encode(tmpString.getBytes());
>                 if ( outString == null )
>                 {
>                   System.out.println("Failed- Not able to encode. ");
>                 } else {
>                   outFile.write(outString.getBytes());
>                 }
>             } else {
>                 String tmpString=sb.toString();
>                 byte outByteArray[] =Base64.decode(tmpString);
>                 if ( outByteArray == null )
>                 {
>                   System.out.println("Failed- Not able to decode. ");
>                 } else {
>                   outFile.write(outByteArray);
>                 }
>             }
>         } finally {
>             if (inFile != null) {
>                 inFile.close();
>             }
>             if (outFile != null) {
>                 outFile.close();
>             }
>         }
>     }
> }

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

---------------------------------------------------------------------
To unsubscribe, e-mail: j-dev-unsubscribe@xerces.apache.org
For additional commands, e-mail: j-dev-help@xerces.apache.org


[jira] Updated: (XERCESJ-1222) Base64 encode/decode bug using xerces-2_9_0 while processing binary files.

Posted by "Venkat Ganesh (JIRA)" <xe...@xml.apache.org>.
     [ http://issues.apache.org/jira/browse/XERCESJ-1222?page=all ]

Venkat Ganesh updated XERCESJ-1222:
-----------------------------------

    Attachment: Base64EncodeDecode2.java

Micheal, 

Thanks for pointing out the conversion between byte to char is not ok. With the modified program, Base64EncodeDecode2.java, I am able to successfully encode and decode .exe files on Windows. 

Thanks a lot. 


> Base64 encode/decode bug using xerces-2_9_0 while processing binary files.
> --------------------------------------------------------------------------
>
>                 Key: XERCESJ-1222
>                 URL: http://issues.apache.org/jira/browse/XERCESJ-1222
>             Project: Xerces2-J
>          Issue Type: Bug
>    Affects Versions: 2.9.0
>         Environment: Microsoft Windows XP [Version 5.1.2600]
>            Reporter: Venkat Ganesh
>         Attachments: Base64EncodeDecode.java, Base64EncodeDecode2.java
>
>
> Hi, 
> The program Base64EncodeDecode.java shown below, is using org.apache.xerces.impl.dv.util.Base64 class for base64 encode/decode. It works well with ASCII files. However, it fails with binary files. 
> Thanks. 
> Testing.
> ======
> Make sure xerces jar files are in the classpath. 
> Testing with ASCII files. 
> ==================
> Encode a text file as shown below: 
> java Base64EncodeDecode encode foo.xml foo_encoded.xml
> Decode the encoded file as shown below: 
> java Base64EncodeDecode decode foo_encoded.xml foo_decoded.xml
> Verified foo.xml and foo_decoded.xml are identical, as expected. 
> Testing with binary files. 
> ==================
> Encode a binary file as shown below: 
> java Base64EncodeDecode encode procexp.exe procexp_encoded.exe
> Decode the encoded file as shown below: 
> java Base64EncodeDecode decode procexp_encoded.exe procexp_decoded.exe
> Verify you cannot double click and open the decoded exe file. You will see the error message that the decoded exe file is not a valid Win32 application even though the original executable (procexp.exe) is a valid executable. The number of bytes and size of the original and decoded executables are same; however, the third byte in procexp.exe is ox90 while it is 0x3f in the procexp_decoded.exe, when viewed using a hex editor. There are many more differences. 
> I am able to reproduce this issue with xerces-2_9_0 as well as xerces-2_7_1 jar files. Is this a known bug? 
> How to encode/decode binary files using xerces jar files? 
> Thanks and regards, 
> V.Ganesh
> venkat_ganesh43016@yahoo.com 
> Base64EncodeDecode.java 
> ======================
> import java.io.FileInputStream;
> import java.io.FileOutputStream;
> import java.io.IOException;
> import org.apache.xerces.impl.dv.util.Base64;
> public class Base64EncodeDecode {
>     public static void main(String[] args) throws IOException {
>         if ( args.length != 3 )
>         {
>             System.out.println("Usage java Base64EncodeDecode encode|decode <input-file-name> <output-file-name>");
>             System.out.println("You can use this program to encode binary files also.");
>             return;
>         }
>         StringBuffer sb=new StringBuffer(10000);
>         FileInputStream inFile = null;
>         FileOutputStream outFile = null;
>         try {
>             inFile = new FileInputStream(args[1]);
>             outFile = new FileOutputStream(args[2]);
>             int byteRead=0;
>             int ctr=0;
>             int numberOfChars=0;
>             while ((byteRead = inFile.read()) != -1) {
>                sb.append((char ) byteRead);
>                numberOfChars++;
>             }
>             if ( args[0].equalsIgnoreCase("encode") == true )
>             {
>                 String tmpString=sb.toString();
>                 String outString=Base64.encode(tmpString.getBytes());
>                 if ( outString == null )
>                 {
>                   System.out.println("Failed- Not able to encode. ");
>                 } else {
>                   outFile.write(outString.getBytes());
>                 }
>             } else {
>                 String tmpString=sb.toString();
>                 byte outByteArray[] =Base64.decode(tmpString);
>                 if ( outByteArray == null )
>                 {
>                   System.out.println("Failed- Not able to decode. ");
>                 } else {
>                   outFile.write(outByteArray);
>                 }
>             }
>         } finally {
>             if (inFile != null) {
>                 inFile.close();
>             }
>             if (outFile != null) {
>                 outFile.close();
>             }
>         }
>     }
> }

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

---------------------------------------------------------------------
To unsubscribe, e-mail: j-dev-unsubscribe@xerces.apache.org
For additional commands, e-mail: j-dev-help@xerces.apache.org