harmony-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Alexey Petrenko (JIRA)" <j...@apache.org>
Subject [jira] Updated: (HARMONY-100) text/BidiWrapper issue?
Date Thu, 12 Oct 2006 17:52:37 GMT
     [ 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 }, 
> 		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


View raw message