-
Bug
-
Resolution: Fixed
-
P3
-
5.0u8, 6
-
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
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