Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-6416024

JDK 6: after remove ALL, then add event to javax.sound.midi.Track got ArrayIndexOutOfBoundsException

XMLWordPrintable

    • 5.0
    • b92
    • x86
    • linux_suse_sles_10, solaris
    • Verified

      In case of removing ALL MidiEvent from Track object, attempt to add any MidiEvent
      to this track causes java.lang.ArrayIndexOutOfBoundsException:

      Reduced test code for reproduce ( see full test source in attach: test409.java )
      ------------------------------------------------------
      import javax.sound.midi.*;

      public class test409 {
         private static boolean testPassed = false;

         public static void main(String[] args) {

            Sequence testSequence;
            Track testTrack;
            MidiEvent currEvent;

            try {
                testSequence = new Sequence(Sequence.PPQ, 10);
            } catch(InvalidMidiDataException e ) {
               System.out.println("Sequence creation failed: got exception " + e);
               testPassed = false;
               return;
            }

            testTrack = testSequence.createTrack();

      // Track events cleanup:
      // get next event ( use index 0 ) and try to remove it
            System.out.println("Track size initial:" + testTrack.size());

            while( testTrack.size() > 0 ) {
               try {
                  currEvent = testTrack.get(0);
                  testTrack.remove(currEvent);
               } catch (Exception e) {
                  System.out.println("get()/remove() MidiEvent for track failed: " + e);
                  testPassed = false;
                  return;
               }
            }

            MetaMessage testMetaMessage = new MetaMessage();
            MidiEvent testMidiEvent = new MidiEvent(testMetaMessage, 10);

      // Try to add event to track after cleanup
            try {
               if( !testTrack.add(testMidiEvent) ) {
                     System.out.println("Track event add failed");
                  testPassed = false;
               }
            } catch (Exception e) {
               System.out.println("add() MidiEvent for track failed: got exception " + e);
               testPassed = false;
            }
            System.out.println("Passed: " + testPassed);
         }
      }
      -----------------------------------------
      Test output:
      Track size initial:1
      add() MidiEvent for track failed: got exception java.lang.ArrayIndexOutOfBoundsException: -1
      Passed: false

      Comment: possible incorrect work with eotEvent in remove()/add() methods of
               javax.sound.midi.Track
      Failed: Solaris x86, Solaris sparc, Windows ( platform independent failure )
           on JDK 6 ( mustang ), JDK 5.0 u7

            amenkov Alex Menkov
            dgubkin Dmitriy Gubkin (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

              Created:
              Updated:
              Resolved:
              Imported:
              Indexed: