RFR: 8357714: AudioClip.play crash on macOS when loading resource from jar

Alexander Matveev almatvee at openjdk.org
Thu Jul 3 21:30:45 UTC 2025


On Wed, 2 Jul 2025 21:47:05 GMT, Johan Vos <jvos at openjdk.org> wrote:

> After JDK-8287822 (https://bugs.openjdk.org/browse/JDK-8287822), mpeg file content is no longer played via GSTPlatform but via OSXPlatform. 
> We need to correctly handle data in case the source is a file inside a jar, in which case CJavaInputStreamCallbacks is used.
> 
> The 2 changes I made are:
> 1. Use ConnectionHolder instead of Locator for CJavaInputStreamCallbacks in case a jar resource is used.
> 2. In case of random access datasource, use readBlock instead of readNextBlock in AVMediaPlayer

modules/javafx.media/src/main/native/jfxmedia/platform/osx/OSXMediaPlayer.mm line 331:

> 329:         CJavaInputStreamCallbacks *callbacks = new (nothrow) CJavaInputStreamCallbacks();
> 330:         jobject jConnectionHolder = CLocator::CreateConnectionHolder(env, jLocator);
> 331:         if (callbacks == NULL) {

Missing `NULL` check for  `jConnectionHolder`. `if (callbacks == NULL || jConnectionHolder == NULL)`

If `callbacks` is not `NULL` it needs to be deleted.

modules/javafx.media/src/main/native/jfxmedia/platform/osx/avf/AVFMediaPlayer.mm line 806:

> 804: 
> 805:         NSMutableData* readData = nil;
> 806:         bool isRandomAccess = locatorStream->GetCallbacks()->IsRandomAccess();

`URIConnectionHolder` always return `false` for "jar" or "jrt" protocol. Why it was added?

-------------

PR Review Comment: https://git.openjdk.org/jfx/pull/1839#discussion_r2183766995
PR Review Comment: https://git.openjdk.org/jfx/pull/1839#discussion_r2183772092


More information about the openjfx-dev mailing list