harmony-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Boris Kuznetsov (JIRA)" <j...@apache.org>
Subject [jira] Commented: (HARMONY-1087) [classlib][crypto] compatibility: RI throws IllegalStateException while Harmony IOException (according to spec)
Date Wed, 30 Aug 2006 08:37:24 GMT
    [ http://issues.apache.org/jira/browse/HARMONY-1087?page=comments#action_12431508 ] 
            
Boris Kuznetsov commented on HARMONY-1087:
------------------------------------------

There is a difference in RI and Harmony behavior: RI resets the encapsulated cipher object
to its initial state (calls doFinal method of cipher - see RI's stack trace) but Harmony doesn't.
Such behavior is not specified in CipherInputStream specification but it may affect some applications.
So CipherInputStream.close() implementation should be fixed.

Note:
1. Resetting of encapsulated cipher is specified for CipherOutputStream.close() but not specified
for CipherInputStream.close(). It looks like spec. bug.
2. According the spec. cipher must be initialized before being used by a CipherInputStream.
So throwing of "IllegalStateException: Cipher not initialized" is a reasonable behavior.


> [classlib][crypto] compatibility: RI throws IllegalStateException while Harmony IOException
(according to spec)
> ---------------------------------------------------------------------------------------------------------------
>
>                 Key: HARMONY-1087
>                 URL: http://issues.apache.org/jira/browse/HARMONY-1087
>             Project: Harmony
>          Issue Type: Bug
>          Components: Classlib
>            Reporter: Vladimir Ivanov
>         Assigned To: Mikhail Loenko
>            Priority: Minor
>
> The spec says for the method javax.crypto.CipherInputStream().close(): "Throws: IOException
- if an I/O error occurs."
> The Harmony implementation throws IOException for simple test while RI throws "IllegalStateException:
Cipher not initialized".
> Seems, it is 'non-bug diff'.
> ================ test.java =====================
> import javax.crypto.*;
> import java.io.*;
> public class test  { 
>     public static void main (String[] args) {   
>        try {
>            new CipherInputStream(new ByteArrayInputStream(new byte[]{1}), Cipher.getInstance("DES/CBC/PKCS5Padding")).close();
>        } catch (Exception e) {
>            e.printStackTrace();
>        } 
>        try {
>            new CipherInputStream(new BufferedInputStream((InputStream)null), Cipher.getInstance("DES/CBC/PKCS5Padding")).close();
>        } catch (Exception e) {
>            e.printStackTrace();
>        } 
>     }
> }
> ============================================
> Output:
> C:\tmp\tmp17>C:\jdk1.5.0_06\bin\java.exe -cp . -showversion test
> java version "1.5.0_06"
> Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_06-b05)
> Java HotSpot(TM) Client VM (build 1.5.0_06-b05, mixed mode)
> java.lang.IllegalStateException: Cipher not initialized
>         at javax.crypto.Cipher.c(DashoA12275)
>         at javax.crypto.Cipher.doFinal(DashoA12275)
>         at javax.crypto.CipherInputStream.close(DashoA12275)
>         at test.main(test.java:8)
> java.lang.IllegalStateException: Cipher not initialized
>         at javax.crypto.Cipher.c(DashoA12275)
>         at javax.crypto.Cipher.doFinal(DashoA12275)
>         at javax.crypto.CipherInputStream.close(DashoA12275)
>         at test.main(test.java:13)
> 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.CipherInputStream.close()V(DashoA12275:???)
>         at test.main(test.java:8)
> java.lang.IllegalStateException: Cipher not initialized
>         at javax.crypto.Cipher.c()V(DashoA12275:???)
>         at javax.crypto.Cipher.doFinal()[B(DashoA12275:???)
>         at javax.crypto.CipherInputStream.close()V(DashoA12275:???)
>         at test.main(test.java:13)
> C:\tmp\tmp17>C:\harmony\trunk_0427\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.
> java.io.IOException: Stream is closed
>         at java.io.BufferedInputStream.close(BufferedInputStream.java:116)
>         at javax.crypto.CipherInputStream.close(CipherInputStream.java:136)
>         at test.main(test.java:13)

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

        

Mime
View raw message