Uploaded image for project: 'Harmony'
  1. Harmony
  2. HARMONY-100

text/BidiWrapper issue?

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • None
    • None
    • Classlib
    • None
    • Moderate

    Description

      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.

      Attachments

        1. HARMONY-100.diff
          6 kB
          Alexey Petrenko
        2. HARMONY-100.diff
          6 kB
          Alexey Petrenko

        Activity

          People

            cap Alexey Petrenko
            vvgorr Vladimir Gorr
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: