Looks good to me.

Yours,
Ralf

PS. Interesting to know the actual root cause.

Am 05.04.2019 um 08:22 schrieb Sergey Bylokhov:
Hello, Audio Guru.

Please review the fix for jdk13.

Bug: https://bugs.openjdk.java.net/browse/JDK-8221445
Fix: http://cr.openjdk.java.net/~serb/8221445/webrev.00

We can get unexpected ArrayIndexOutOfBoundsException, when we create the FastSysexMessage in this place: http://hg.openjdk.java.net/jdk/jdk/file/532e88de77eb/src/java.desktop/share/classes/com/sun/media/sound/AbstractMidiDevice.java#l684

Th root cause of the failure is the empty "data", which is incorrect sysex message. According to the specification in this case the InvalidMidiDataException should be thrown. And the code above which creates the FastSysexMessage is ready for this exception:

  } catch (InvalidMidiDataException e) {
    // this happens when invalid data comes over the wire. Ignore it.
    return;
  }

Wrong exception is occurred, because in the FastSysexMessage we do not throw any exceptions, but instead we call super.setMessage() for the broken data with assumption that the parent class will throw correct exception. But unfortunately the parent class(unlike FastSysexMessage) does not have the check for the empty array.

PS: It is also interesting the in some cases we throw IndexOutOfBoundsException which is not specified in the javadoc, I'll update the spec later.


Reply via email to