You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@geronimo.apache.org by "Rick McGuire (JIRA)" <ji...@apache.org> on 2010/05/19 17:31:53 UTC

[jira] Assigned: (GERONIMO-5326) Geronimo javamail does not work on non-ASCII platforms

     [ https://issues.apache.org/jira/browse/GERONIMO-5326?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Rick McGuire reassigned GERONIMO-5326:
--------------------------------------

    Assignee: Rick McGuire

> Geronimo javamail does not work on non-ASCII platforms
> ------------------------------------------------------
>
>                 Key: GERONIMO-5326
>                 URL: https://issues.apache.org/jira/browse/GERONIMO-5326
>             Project: Geronimo
>          Issue Type: Bug
>      Security Level: public(Regular issues) 
>          Components: mail
>         Environment: z/OS
>            Reporter: Robin Fernandes
>            Assignee: Rick McGuire
>
> [RFC-1939|http://www.ietf.org/rfc/rfc1939.txt] states that in the POP3 protocol, "Keywords and arguments consist of printable ASCII characters."
> Geronimo javamail creates a PrintWriter to send messages down the line, but does not specify a Charset. Therefore, Strings written to the PrintWriter will be converted to bytes using the platform default encoding. On a non-ASCII platform, such as z/OS (which is an EBCDIC platform), this means non-ASCII data will be sent down the line. Consequently, the POP3 protocol is violated and the mail server will not understand the messages.
> In my context, this manifests as a javax.mail.AuthenticationFailedException, presumably because the server fails to understand the login commands.
> The patch below at least gets past the auth step. However, I suspect there will be further charset problems relating to decoding MIME etc... Essentially, a potential problem exists wherever the library uses new String(bytes[]), String.getBytes(), InputStreamReaders, OuputStreamWriters or any other entity that performs byte[]<->String conversions without explicitly specifying which Charset to use.
> In some environments, a workaround may be to force the default encoding to ASCII by setting system property file.encoding to an ASCII codepage (e.g. -Dfile.encoding=ISO8859-1), but this is not satisfactory if other libraries in the same runtime expect the default encoding to be EBCDIC.
> {code} 
> Index: POP3Connection.java
> ===================================================================
> --- POP3Connection.java	(revision 946178)
> +++ POP3Connection.java	(working copy)
> @@ -22,6 +22,7 @@
>  import java.net.Socket;
>  import java.net.SocketException;
>  import java.net.UnknownHostException;
> +import java.nio.charset.Charset;
>  import java.security.MessageDigest;
>  import java.security.NoSuchAlgorithmException;
>  import java.util.ArrayList;
> @@ -156,8 +157,9 @@
>          
>          // The POp3 protocol is inherently a string-based protocol, so we get 
>          // string readers/writers for the connection streams 
> -        reader = new BufferedReader(new InputStreamReader(inputStream));
> -        writer = new PrintWriter(new BufferedOutputStream(outputStream));
> +        Charset iso88591 = Charset.forName("ISO8859-1");
> +        reader = new BufferedReader(new InputStreamReader(inputStream, iso88591));
> +        writer = new PrintWriter(new OutputStreamWriter(new BufferedOutputStream(outputStream), iso88591));
>      }
>      
>      protected void getWelcome() throws IOException {
> {code} 

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.