harmony-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Tim Ellison (JIRA)" <j...@apache.org>
Subject [jira] Commented: (HARMONY-67) java.nio.charset.Charset.decode(ByteBuffer) throws unexpected BufferOverflowException for UTF-16BE, UTF-16LE, UTF-16 charsets.
Date Fri, 17 Feb 2006 10:44:24 GMT
    [ http://issues.apache.org/jira/browse/HARMONY-67?page=comments#action_12366769 ] 

Tim Ellison commented on HARMONY-67:
------------------------------------

Svetlana, can you explain why you think the decode behavior is wrong?

The test, as written in our SVN repository, passes on Harmony code and the Sun implementation
of Java.
As Vladimir wrote, this may be a compatibility issue with the BEA implementation, and I agree
that our behavior is to spec.


> java.nio.charset.Charset.decode(ByteBuffer) throws unexpected BufferOverflowException
 for UTF-16BE, UTF-16LE, UTF-16 charsets.
> -------------------------------------------------------------------------------------------------------------------------------
>
>          Key: HARMONY-67
>          URL: http://issues.apache.org/jira/browse/HARMONY-67
>      Project: Harmony
>         Type: Bug
>   Components: Classlib
>     Reporter: Svetlana Samoilenko
>     Assignee: Tim Ellison

>
> According to j2se 1.4.2 specification for Charset.decode(ByteBuffer  b) the method must
not throw any exceptions.
> The test listed below shows that there is unexpected BufferOverflowException thrown if
charset name is one in the following:  UTF-16BE, UTF-16LE, UTF-16.
> BEA does not throw any exceptions.
> Code to reproduce: 
> import java.nio.charset.Charset; 
> import java.nio.ByteBuffer; 
> import java.nio.CharBuffer; 
> public class test2 {   
>     public static void main(String[] args) throws Exception { 
>         byte[] b = new byte[] {(byte)1}; 
>         ByteBuffer buf= ByteBuffer.wrap(b); 
>         CharBuffer charbuf=Charset.forName("UTF-16").decode(buf); 
>         System.out.println("CharBuffer.length()="+ charbuf.length());
>     } 
> }
> Steps to Reproduce: 
> 1. Build Harmony (check-out on 2006-01-30) j2se subset as described in README.txt. 
> 2. Compile test2.java using BEA 1.4 javac 
> > javac -d . test2.java 
> 3. Run java using compatible VM (J9) 
> > java -showversion test2 
> Output: 
> C:\tmp>C:\jrockit-j2sdk1.4.2_04\bin\java.exe -showversion test2 
> java version "1.4.2_04" 
> Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_04-b05) 
> BEA WebLogic JRockit(TM) 1.4.2_04 JVM (build ari-31788-20040616-1132-win-ia32, Native
Threads, GC strategy: parallel) 
> CharBuffer.length()=0
> C:\tmp>C:\harmony\trunk\deploy\jre\bin\java -showversion test2 
> (c) Copyright 1991, 2005 The Apache Software Foundation or its licensors, as applicable.

>  java.nio.BufferOverflowException
>         at java.nio.CharBuffer.put(CharBuffer.java:662) 
>         at java.nio.CharBuffer.put(CharBuffer.java:629) 
>         at java.nio.charset.CharsetDecoder.decode(CharsetDecoder.java:406) 
>         at java.nio.charset.CharsetDecoder.decode(CharsetDecoder.java:243) 
>         at java.nio.charset.Charset.decode(Charset.java:630) 
>         at test2.main(test2.java:8)
> Suggested junit test case:
> ------------------------ CharsetTest.java -------------------------------------------------

> import java.nio.charset.Charset; 
> import java.nio.ByteBuffer; 
> import java.nio.CharBuffer; 
> import junit.framework.*; 
> public class CharsetTest extends TestCase { 
>     public static void main(String[] args) { 
>         junit.textui.TestRunner.run(CharsetTest.class); 
>     } 
>     public void test_decode() { 
>         byte[] b = new byte[] {(byte)1}; 
>         ByteBuffer buf= ByteBuffer.wrap(b); 
>         CharBuffer charbuf=Charset.forName("UTF-16").decode(buf); 
>         assertEquals("Assert 0: charset UTF-16",0,charbuf.length());        
>         
>         charbuf=Charset.forName("UTF-16BE").decode(buf); 
>         assertEquals("Assert 1: charset UTF-16BE",0, charbuf.length());        
>         
>         charbuf=Charset.forName("UTF-16LE").decode(buf); 
>         assertEquals("Assert 2: charset UTF16LE",0, charbuf.length());
>     
>    } 
> }

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