mirror of
https://github.com/openjdk/jdk.git
synced 2026-02-25 01:30:10 +00:00
8004261: Improve input validation
Reviewed-by: art, mschoene, amenkov
This commit is contained in:
parent
3b34f3b493
commit
0c8b65724a
@ -56,7 +56,7 @@ abstract class AbstractMidiDevice implements MidiDevice, ReferenceCountingDevice
|
||||
// from simultaneous creation and destruction
|
||||
// reduces possibility of deadlock, compared to
|
||||
// synchronizing to the class instance
|
||||
private Object traRecLock = new Object();
|
||||
private final Object traRecLock = new Object();
|
||||
|
||||
// DEVICE ATTRIBUTES
|
||||
|
||||
@ -474,7 +474,7 @@ abstract class AbstractMidiDevice implements MidiDevice, ReferenceCountingDevice
|
||||
This is necessary for Receivers retrieved via MidiSystem.getReceiver()
|
||||
(which opens the device implicitely).
|
||||
*/
|
||||
protected abstract class AbstractReceiver implements MidiDeviceReceiver {
|
||||
abstract class AbstractReceiver implements MidiDeviceReceiver {
|
||||
private boolean open = true;
|
||||
|
||||
|
||||
@ -483,24 +483,24 @@ abstract class AbstractMidiDevice implements MidiDevice, ReferenceCountingDevice
|
||||
Receiver. Therefore, subclasses should not override this method.
|
||||
Instead, they should implement implSend().
|
||||
*/
|
||||
public synchronized void send(MidiMessage message, long timeStamp) {
|
||||
if (open) {
|
||||
implSend(message, timeStamp);
|
||||
} else {
|
||||
@Override
|
||||
public final synchronized void send(final MidiMessage message,
|
||||
final long timeStamp) {
|
||||
if (!open) {
|
||||
throw new IllegalStateException("Receiver is not open");
|
||||
}
|
||||
implSend(message, timeStamp);
|
||||
}
|
||||
|
||||
|
||||
protected abstract void implSend(MidiMessage message, long timeStamp);
|
||||
|
||||
abstract void implSend(MidiMessage message, long timeStamp);
|
||||
|
||||
/** Close the Receiver.
|
||||
* Here, the call to the magic method closeInternal() takes place.
|
||||
* Therefore, subclasses that override this method must call
|
||||
* 'super.close()'.
|
||||
*/
|
||||
public void close() {
|
||||
@Override
|
||||
public final void close() {
|
||||
open = false;
|
||||
synchronized (AbstractMidiDevice.this.traRecLock) {
|
||||
AbstractMidiDevice.this.getReceiverList().remove(this);
|
||||
@ -508,11 +508,12 @@ abstract class AbstractMidiDevice implements MidiDevice, ReferenceCountingDevice
|
||||
AbstractMidiDevice.this.closeInternal(this);
|
||||
}
|
||||
|
||||
public MidiDevice getMidiDevice() {
|
||||
@Override
|
||||
public final MidiDevice getMidiDevice() {
|
||||
return AbstractMidiDevice.this;
|
||||
}
|
||||
|
||||
protected boolean isOpen() {
|
||||
final boolean isOpen() {
|
||||
return open;
|
||||
}
|
||||
|
||||
|
||||
@ -32,7 +32,7 @@ import javax.sound.midi.*;
|
||||
*
|
||||
* @author Florian Bomers
|
||||
*/
|
||||
class FastShortMessage extends ShortMessage {
|
||||
final class FastShortMessage extends ShortMessage {
|
||||
private int packedMsg;
|
||||
|
||||
public FastShortMessage(int packedMsg) throws InvalidMidiDataException {
|
||||
|
||||
@ -32,7 +32,7 @@ import javax.sound.midi.*;
|
||||
*
|
||||
* @author Florian Bomers
|
||||
*/
|
||||
class FastSysexMessage extends SysexMessage {
|
||||
final class FastSysexMessage extends SysexMessage {
|
||||
|
||||
FastSysexMessage(byte[] data) throws InvalidMidiDataException {
|
||||
super(data);
|
||||
|
||||
@ -103,9 +103,9 @@ class MidiOutDevice extends AbstractMidiDevice {
|
||||
|
||||
class MidiOutReceiver extends AbstractReceiver {
|
||||
|
||||
protected void implSend(MidiMessage message, long timeStamp) {
|
||||
int length = message.getLength();
|
||||
int status = message.getStatus();
|
||||
void implSend(final MidiMessage message, final long timeStamp) {
|
||||
final int length = message.getLength();
|
||||
final int status = message.getStatus();
|
||||
if (length <= 3 && status != 0xF0 && status != 0xF7) {
|
||||
int packedMsg;
|
||||
if (message instanceof ShortMessage) {
|
||||
@ -140,11 +140,15 @@ class MidiOutDevice extends AbstractMidiDevice {
|
||||
}
|
||||
nSendShortMessage(id, packedMsg, timeStamp);
|
||||
} else {
|
||||
final byte[] data;
|
||||
if (message instanceof FastSysexMessage) {
|
||||
nSendLongMessage(id, ((FastSysexMessage) message).getReadOnlyMessage(),
|
||||
length, timeStamp);
|
||||
data = ((FastSysexMessage) message).getReadOnlyMessage();
|
||||
} else {
|
||||
nSendLongMessage(id, message.getMessage(), length, timeStamp);
|
||||
data = message.getMessage();
|
||||
}
|
||||
final int dataLength = Math.min(length, data.length);
|
||||
if (dataLength > 0) {
|
||||
nSendLongMessage(id, data, dataLength, timeStamp);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1026,7 +1026,7 @@ class RealTimeSequencer extends AbstractMidiDevice implements Sequencer, AutoCon
|
||||
|
||||
class SequencerReceiver extends AbstractReceiver {
|
||||
|
||||
protected void implSend(MidiMessage message, long timeStamp) {
|
||||
void implSend(MidiMessage message, long timeStamp) {
|
||||
if (recording) {
|
||||
long tickPos = 0;
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user