You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by "Aljoscha Rittner (JIRA)" <se...@james.apache.org> on 2008/02/24 19:15:14 UTC

[jira] Created: (MIME4J-38) writeTo Implementation in Multipart is broken.

writeTo Implementation in Multipart is broken. 
-----------------------------------------------

                 Key: MIME4J-38
                 URL: https://issues.apache.org/jira/browse/MIME4J-38
             Project: Mime4j
          Issue Type: Bug
         Environment: Java 1.6
            Reporter: Aljoscha Rittner


This is a typical mixed-buffered/nonbuffered-Stream Bug ;-)

This is the implementation in writeTo:

---------------------------------------------------------------------------
        BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(out, CharsetUtil.getCharset(getCharset())),8192);
        
        writer.write(getPreamble() + "\r\n");

        for (int i = 0; i < bodyParts.size(); i++) {
            writer.write(boundary + "\r\n");
            ((BodyPart) bodyParts.get(i)).writeTo(out);
        }

        writer.write(getEpilogue() + "\r\n");
        writer.write(boundary + "--" + "\r\n");
---------------------------------------------------------------------------

But all writer.write (...) Strings get lost in the buffer. The non buffered writes throw the OutputStreamWriter are ok. This writeTo method creates Multipart-Messages without any boundary.

A mix with buffered and non buffered streams is very danger. This is the right (but ugly) implementation:

---------------------------------------------------------------------------
        writer.write(getPreamble() + "\r\n");
        writer.flush();

        for (int i = 0; i < bodyParts.size(); i++) {
            writer.write(boundary + "\r\n");
            writer.flush();

            ((BodyPart) bodyParts.get(i)).writeTo(out);
        }

        writer.write(getEpilogue() + "\r\n");
        writer.write(boundary + "--" + "\r\n");
        writer.flush();
---------------------------------------------------------------------------

best regards,
  josh.

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


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


[jira] Resolved: (MIME4J-38) writeTo Implementation in Multipart is broken.

Posted by "Stefano Bagnara (JIRA)" <se...@james.apache.org>.
     [ https://issues.apache.org/jira/browse/MIME4J-38?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Stefano Bagnara resolved MIME4J-38.
-----------------------------------

       Resolution: Fixed
    Fix Version/s: 0.4
         Assignee: Robert Burrell Donkin

This has already been fixed in trunk by Robert (r616525)

> writeTo Implementation in Multipart is broken. 
> -----------------------------------------------
>
>                 Key: MIME4J-38
>                 URL: https://issues.apache.org/jira/browse/MIME4J-38
>             Project: Mime4j
>          Issue Type: Bug
>    Affects Versions: 0.3
>         Environment: Java 1.6
>            Reporter: Aljoscha Rittner
>            Assignee: Robert Burrell Donkin
>             Fix For: 0.4
>
>
> This is a typical mixed-buffered/nonbuffered-Stream Bug ;-)
> This is the implementation in writeTo:
> ---------------------------------------------------------------------------
>         BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(out, CharsetUtil.getCharset(getCharset())),8192);
>         
>         writer.write(getPreamble() + "\r\n");
>         for (int i = 0; i < bodyParts.size(); i++) {
>             writer.write(boundary + "\r\n");
>             ((BodyPart) bodyParts.get(i)).writeTo(out);
>         }
>         writer.write(getEpilogue() + "\r\n");
>         writer.write(boundary + "--" + "\r\n");
> ---------------------------------------------------------------------------
> But all writer.write (...) Strings get lost in the buffer. The non buffered writes throw the OutputStreamWriter are ok. This writeTo method creates Multipart-Messages without any boundary.
> A mix with buffered and non buffered streams is very danger. This is the right (but ugly) implementation:
> ---------------------------------------------------------------------------
>         writer.write(getPreamble() + "\r\n");
>         writer.flush();
>         for (int i = 0; i < bodyParts.size(); i++) {
>             writer.write(boundary + "\r\n");
>             writer.flush();
>             ((BodyPart) bodyParts.get(i)).writeTo(out);
>         }
>         writer.write(getEpilogue() + "\r\n");
>         writer.write(boundary + "--" + "\r\n");
>         writer.flush();
> ---------------------------------------------------------------------------
> best regards,
>   josh.

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


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


[jira] Updated: (MIME4J-38) writeTo Implementation in Multipart is broken.

Posted by "Stefano Bagnara (JIRA)" <se...@james.apache.org>.
     [ https://issues.apache.org/jira/browse/MIME4J-38?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Stefano Bagnara updated MIME4J-38:
----------------------------------

    Affects Version/s: 0.3

Please make sure you write the version you are reporting the bug against.

> writeTo Implementation in Multipart is broken. 
> -----------------------------------------------
>
>                 Key: MIME4J-38
>                 URL: https://issues.apache.org/jira/browse/MIME4J-38
>             Project: Mime4j
>          Issue Type: Bug
>    Affects Versions: 0.3
>         Environment: Java 1.6
>            Reporter: Aljoscha Rittner
>            Assignee: Robert Burrell Donkin
>             Fix For: 0.4
>
>
> This is a typical mixed-buffered/nonbuffered-Stream Bug ;-)
> This is the implementation in writeTo:
> ---------------------------------------------------------------------------
>         BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(out, CharsetUtil.getCharset(getCharset())),8192);
>         
>         writer.write(getPreamble() + "\r\n");
>         for (int i = 0; i < bodyParts.size(); i++) {
>             writer.write(boundary + "\r\n");
>             ((BodyPart) bodyParts.get(i)).writeTo(out);
>         }
>         writer.write(getEpilogue() + "\r\n");
>         writer.write(boundary + "--" + "\r\n");
> ---------------------------------------------------------------------------
> But all writer.write (...) Strings get lost in the buffer. The non buffered writes throw the OutputStreamWriter are ok. This writeTo method creates Multipart-Messages without any boundary.
> A mix with buffered and non buffered streams is very danger. This is the right (but ugly) implementation:
> ---------------------------------------------------------------------------
>         writer.write(getPreamble() + "\r\n");
>         writer.flush();
>         for (int i = 0; i < bodyParts.size(); i++) {
>             writer.write(boundary + "\r\n");
>             writer.flush();
>             ((BodyPart) bodyParts.get(i)).writeTo(out);
>         }
>         writer.write(getEpilogue() + "\r\n");
>         writer.write(boundary + "--" + "\r\n");
>         writer.flush();
> ---------------------------------------------------------------------------
> best regards,
>   josh.

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


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