You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by "Alexey Petrenko (JIRA)" <ji...@apache.org> on 2006/10/12 19:52:37 UTC

[jira] Updated: (HARMONY-100) text/BidiWrapper issue?

     [ http://issues.apache.org/jira/browse/HARMONY-100?page=all ]

Alexey Petrenko updated HARMONY-100:
------------------------------------

    Attachment: HARMONY-100.diff

It seems that it is not possible to retrieve original embedding levels pointer from UBiDi. So we need to store it somewhere.

I've introduced a BiDiData structure to keep UBiDi and embedding levels pointers at the same place. In this case only native part is changed.

NB: This issue causes BiDiTest failure on DRLVM while it works fine on IBM VME. So we do not need additional unit tests.

> text/BidiWrapper issue?
> -----------------------
>
>                 Key: HARMONY-100
>                 URL: http://issues.apache.org/jira/browse/HARMONY-100
>             Project: Harmony
>          Issue Type: Bug
>          Components: Classlib
>            Reporter: Vladimir Gorr
>         Attachments: HARMONY-100.diff
>
>
> Let's consider the following test:
> import java.text.Bidi;
> public class Test {
> 	public static void main(String[] args) throws Exception {
> 		Bidi bd = new Bidi(new char[] { 's', 's', 's' }, 0, 
> 				new byte[] { (byte) -7,	(byte) -2, (byte) -3 }, 
> 				0, 3, Bidi.DIRECTION_DEFAULT_LEFT_TO_RIGHT);
> 		System.out.println("Expected 7, real " + "     " + bd.getLevelAt(0));
> 	}
> }
> In my opinion the JNI implementation of Bidi (text/BidiWrapper.c file, ubidi_1setPara() function) contains a potential bug, namely:
> 1. If  the embeddingLevels  argument is not NULL then _embeddingLevels variable is initialized with the JNI GetByteArrayElements() function;
> 2. ICU function (ubidi_setPara) initializes ICU inner structure and puts the _embeddingLevels into it;
> 3. If _embeddingLevels pointer is not NULL then the JNI ReleaseByteArrayElements() function (with 0 as fourth parameter) is called.
>     This function releases the memory (according to JNI specification) the _embeddingLevels pointer refers to;
> 4. After that ICU inner structure isn't initialized properly. Call of ICU ubidi_getLevels() function can return incorrect values (see java test above).
> It seems the JNI_COMMIT parameter instead of "0" should be passed to the ReleaseByteArrayElements() to avoid this problem.
> I'd like to underline the test mentioned above works w/o any issues for Harmony-14 contribution (although it shouldn't sometimes IMHO).
> Therefore if there are any doubts in my argumentation this issue can be closed as invalid. 

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