harmony-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "deven you (JIRA)" <j...@apache.org>
Subject [jira] Commented: (HARMONY-6590) [classlib][luni]A issue about CharsetEncoder.flush() in the OutputStreamWriter.close()
Date Sat, 24 Jul 2010 12:37:00 GMT

    [ https://issues.apache.org/jira/browse/HARMONY-6590?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12891974#action_12891974
] 

deven you commented on HARMONY-6590:
------------------------------------

2010/7/23 Tim Ellison (JIRA) <jira@apache.org>


osw.flush() has no problem, it does not call encoder.flush(), the problem is
in the osw.close() which directly call encoder.flush() without checking
the prerequisites. If you only keep the osw.close() as below:
   public static void main(String[] args) throws IOException {
       ByteArrayOutputStream bos = new ByteArrayOutputStream();
       OutputStreamWriter osw = new OutputStreamWriter(bos, new
MyCharsetEncoder());
       osw.close();

Then harmony trunk will throw IllegalStateException now (since HARMONY-6594
has been applied), meanwhile RI5/RI6 won't throw this exception.
HARMONY-6590 just fix this regression caused by HARMONY-6594. Thanks a lot!



> [classlib][luni]A issue about CharsetEncoder.flush() in the OutputStreamWriter.close()
> --------------------------------------------------------------------------------------
>
>                 Key: HARMONY-6590
>                 URL: https://issues.apache.org/jira/browse/HARMONY-6590
>             Project: Harmony
>          Issue Type: Bug
>          Components: Classlib
>    Affects Versions: 5.0M14
>            Reporter: deven you
>            Assignee: Tim Ellison
>         Attachments: HARMONY-6590.diff
>
>   Original Estimate: 96h
>  Remaining Estimate: 96h
>
> Today I read through the OutputStreamWrtier.close() code below:
>     public void close() throws IOException {
>         synchronized (lock) {
>             if (encoder != null) {
>                 encoder.flush(bytes);
>                 flush();
>                 out.flush();
>                 out.close();
>                 encoder = null;
>                 bytes = null;
>             }
>         }
>     } 
> I remember the java spec says for the CharsetEncoder.flush(): IllegalStateException -
If the previous step of the current encoding operation was an invocation neither of the reset
method nor of the three-argument encode method with a value of true for the endOfInput parameter.
> Obviously OutputStreamWrtier.close() does not check this prerequisite before invoking
the encoder.flush(bytes). So I write a test case[1] to check this issue but it passed, I think
it is because our CharsetEncoder.flush() does not follow the spec.
> Though I think our OutputStreamWrtier.close() should modify to follow the spec. I have
put the patch[1] on this jira.
> And I will also look into the CharsetEncoder.flush() to investigate this problem.
> [1] see the attached patch

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


Mime
View raw message