Skip to content

Commit

Permalink
8301310: The SendRawSysexMessage test may cause a JVM crash
Browse files Browse the repository at this point in the history
Reviewed-by: andrew
Backport-of: d725b73df01ae4478dfaabc47c48cd7231d91afa
  • Loading branch information
mrserb committed Dec 8, 2023
1 parent 74a3ddd commit 3db93fc
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 6 deletions.
8 changes: 5 additions & 3 deletions jdk/src/share/native/com/sun/media/sound/MidiOutDevice.c
@@ -1,5 +1,5 @@
/*
* Copyright (c) 1999, 2020, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1999, 2023, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
Expand Down Expand Up @@ -121,6 +121,7 @@ Java_com_sun_media_sound_MidiOutDevice_nSendLongMessage(JNIEnv* e, jobject thisO
jbyteArray jData, jint size, jlong timeStamp) {
#if USE_PLATFORM_MIDI_OUT == TRUE
UBYTE* data;
UBYTE* msg;
#endif

TRACE0("Java_com_sun_media_sound_MidiOutDevice_nSendLongMessage.\n");
Expand All @@ -133,11 +134,12 @@ Java_com_sun_media_sound_MidiOutDevice_nSendLongMessage(JNIEnv* e, jobject thisO
}
/* "continuation" sysex messages start with F7 (instead of F0), but
are sent without the F7. */
msg = data;
if (data[0] == 0xF7 && size > 1) {
data++;
msg++;
size--;
}
MIDI_OUT_SendLongMessage((MidiDeviceHandle*) (UINT_PTR) deviceHandle, data,
MIDI_OUT_SendLongMessage((MidiDeviceHandle*) (UINT_PTR) deviceHandle, msg,
(UINT32) size, (UINT32)timeStamp);
// release the byte array
(*e)->ReleaseByteArrayElements(e, jData, (jbyte*) data, JNI_ABORT);
Expand Down
17 changes: 14 additions & 3 deletions jdk/test/javax/sound/midi/SysexMessage/SendRawSysexMessage.java
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2020, 2023, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
Expand Down Expand Up @@ -34,8 +34,9 @@

/**
* @test
* @bug 8237495
* @summary fail with a dereferenced memory error when asked to send a raw 0xF7
* @bug 8237495 8301310
* @summary fail with memory errors when asked to send a sysex message starting
* with 0xF7
*/
public final class SendRawSysexMessage {

Expand Down Expand Up @@ -113,6 +114,16 @@ private static void test(MidiDevice.Info info) throws Exception {
(byte) SPECIAL_SYSTEM_EXCLUSIVE}), -1);
System.err.println("note off");
r.send(new ShortMessage(ShortMessage.NOTE_OFF, 5, 5), -1);
System.err.println("sysex part 1 of 3");
r.send(new SysexMessage(new byte[]{
(byte) SYSTEM_EXCLUSIVE, 0x7D, 0x01, 0x02}, 4), -1);
System.err.println("sysex part 2 of 3");
r.send(new SysexMessage(new byte[]{
(byte) SPECIAL_SYSTEM_EXCLUSIVE, 0x03, 0x04}, 3), -1);
System.err.println("sysex part 3 of 3");
r.send(new SysexMessage(new byte[]{
(byte) SPECIAL_SYSTEM_EXCLUSIVE, 0x05, 0x06, 0x07,
(byte) SPECIAL_SYSTEM_EXCLUSIVE}, 4), -1);
System.err.println("done, should quit");
System.err.println();
}
Expand Down

1 comment on commit 3db93fc

@openjdk-notifier
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please sign in to comment.