Details

    • Type: Bug Bug
    • Status: Closed
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: None
    • Fix Version/s: None
    • Component/s: Classlib
    • Labels:
      None
    • Estimated Complexity:
      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.

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

        Activity

        Alexey Petrenko made changes -
        Status Resolved [ 5 ] Closed [ 6 ]
        Alexey Petrenko made changes -
        Status Open [ 1 ] Resolved [ 5 ]
        Resolution Fixed [ 1 ]
        Alexey Petrenko made changes -
        Attachment HARMONY-100.diff [ 12344101 ]
        Alexey Petrenko made changes -
        Assignee Alexey Petrenko [ cap ]
        Alexey Petrenko made changes -
        Attachment HARMONY-100.diff [ 12342824 ]
        Geir Magnusson Jr made changes -
        Field Original Value New Value
        Component/s Classlib [ 12310560 ]
        Vladimir Gorr created issue -

          People

          • Assignee:
            Alexey Petrenko
            Reporter:
            Vladimir Gorr
          • Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved:

              Development