You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by "Boris Kuznetsov (JIRA)" <ji...@apache.org> on 2006/09/07 09:55:24 UTC

[jira] Commented: (HARMONY-1139) [classlib][crypto] compatibility: CipherOutputStream().close() throws the IllegalStateException on RI and the NPE on Harmony

    [ http://issues.apache.org/jira/browse/HARMONY-1139?page=comments#action_12433054 ] 
            
Boris Kuznetsov commented on HARMONY-1139:
------------------------------------------

The last patch is incorrect.

According CipherOutputStream.flush() spec.:
"Any bytes buffered by the encapsulated cipher and waiting to be processed by it will not be written out. For example, if the encapsulated cipher is a block cipher, and the total number of bytes written using one of the write methods is less than the cipher's block size, no bytes will be written out."

So, proposed implementation of flush() - using cipher.doFinal() - is against the spec.

> [classlib][crypto] compatibility: CipherOutputStream().close() throws the IllegalStateException on RI and the NPE on Harmony
> ----------------------------------------------------------------------------------------------------------------------------
>
>                 Key: HARMONY-1139
>                 URL: http://issues.apache.org/jira/browse/HARMONY-1139
>             Project: Harmony
>          Issue Type: Bug
>          Components: Classlib
>            Reporter: Vladimir Ivanov
>         Assigned To: Mikhail Loenko
>            Priority: Minor
>         Attachments: CipherOutputStream.patch, CipherOutputStreamTest.patch, HARMONY-1139.diff
>
>
> The method CipherOutputStream().close()  throws NPE on Harmony and IllegalStateException on RI if stream is 'null'.
> ======================= test.java ======================
> import javax.crypto.*;
> import java.io.*;
> public class test  { 
>     public static void main (String[] args) throws Exception {
>         testCipherOutputStream ch = new testCipherOutputStream((OutputStream) null);
>         new CipherOutputStream(ch, Cipher.getInstance("DES/CBC/PKCS5Padding")).close();  
>    }
> }
> class testCipherOutputStream extends CipherOutputStream {
>      testCipherOutputStream( OutputStream s){
>          super(s);  
>      }
> }
> ====================================================
> Output:
> C:\tmp\tmp17>C:\jrockit-jdk1.5.0-windows-ia32\bin\java.exe -cp . -showversion test
> java version "1.5.0"
> Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0-b64)
> BEA WebLogic JRockit(R) (build dra-38972-20041208-2001-win-ia32, R25.0.0-75, GC: System optimized over throughput (initial strategy singleparpar))
> java.lang.IllegalStateException: Cipher not initialized
>         at javax.crypto.Cipher.c()V(DashoA12275:???)
>         at javax.crypto.Cipher.doFinal()[B(DashoA12275:???)
>         at javax.crypto.CipherOutputStream.close()V(DashoA12275:???)
>         at test.main(test.java:7)
> C:\tmp\tmp17>C:\harmony\classlib1.5\deploy\jdk\jre\bin\java.exe -cp . -showversion test
> java version 1.5 (subset)
> (c) Copyright 1991, 2006 The Apache Software Foundation or its licensors, as applicable.
> Exception in thread "main" java.lang.NullPointerException
>         at javax.crypto.CipherOutputStream.flush(CipherOutputStream.java:88)
>         at javax.crypto.CipherOutputStream.close(CipherOutputStream.java:16)
>         at test.main(test.java:7)

-- 
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