--- old/src/java.desktop/windows/native/libawt/windows/awt_TrayIcon.cpp 2020-06-11 10:31:54.848935700 -0700 +++ new/src/java.desktop/windows/native/libawt/windows/awt_TrayIcon.cpp 2020-06-11 10:31:54.367638400 -0700 @@ -1001,25 +1001,21 @@ delete[] andMaskPtr; - jint *intRasterDataPtr = NULL; + /* Copy the raster data because GDI may fail on some Java heap + * allocated memory. + */ + length = env->GetArrayLength(intRasterData); + jint *intRasterDataPtr = new jint[length]; HBITMAP hColor = NULL; try { - intRasterDataPtr = (jint *)env->GetPrimitiveArrayCritical(intRasterData, 0); - if (intRasterDataPtr == NULL) { - ::DeleteObject(hMask); - return; - } + env->GetIntArrayRegion(intRasterData, 0, length, intRasterDataPtr); hColor = AwtTrayIcon::CreateBMP(NULL, (int *)intRasterDataPtr, nSS, nW, nH); } catch (...) { - if (intRasterDataPtr != NULL) { - env->ReleasePrimitiveArrayCritical(intRasterData, intRasterDataPtr, 0); - } + delete[] intRasterDataPtr; ::DeleteObject(hMask); throw; } - - env->ReleasePrimitiveArrayCritical(intRasterData, intRasterDataPtr, 0); - intRasterDataPtr = NULL; + delete[] intRasterDataPtr; HICON hIcon = NULL;