RFR: JDK-8297480: GetPrimitiveArrayCritical in imageioJPEG misses result - NULL check

Matthias Baesken mbaesken at openjdk.org
Wed Nov 23 14:21:23 UTC 2022


On Wed, 23 Nov 2022 08:18:32 GMT, Matthias Baesken <mbaesken at openjdk.org> wrote:

> Seems there is a remaining GetPrimitiveArrayCritical in imageioJPEG that misses a result - NULL check, this should be added.

Hello , I did a few more grepping and source reading and while 98 or 99 percent of the GetPrimitiveArrayCritical  return values are checked, there are a few more unchecked ones. See below

src/java.desktop/macosx/native/libawt_lwawt/awt/CClipboard.m-136-    jint nElements = (*env)->GetArrayLength(env, inTypes);
src/java.desktop/macosx/native/libawt_lwawt/awt/CClipboard.m-137-    NSMutableArray *formatArray = [NSMutableArray arrayWithCapacity:nElements];
src/java.desktop/macosx/native/libawt_lwawt/awt/CClipboard.m:138:    jlong *elements = (*env)->GetPrimitiveArrayCritical(env, inTypes, NULL);
src/java.desktop/macosx/native/libawt_lwawt/awt/CClipboard.m-139-
src/java.desktop/macosx/native/libawt_lwawt/awt/CClipboard.m-140-    for (i = 0; i < nElements; i++) {
src/java.desktop/macosx/native/libawt_lwawt/awt/CClipboard.m-141-        NSString *pbFormat = formatForIndex(elements[i]);
src/java.desktop/macosx/native/libawt_lwawt/awt/CClipboard.m-142-        if (pbFormat)
src/java.desktop/macosx/native/libawt_lwawt/awt/CClipboard.m-143-            [formatArray addObject:pbFormat];

src/java.desktop/macosx/native/libawt_lwawt/font/CCharToGlyphMapper.m-54-static inline void
src/java.desktop/macosx/native/libawt_lwawt/font/CCharToGlyphMapper.m-55-GetGlyphsFromUnicodes(JNIEnv *env, AWTFont *awtFont,
src/java.desktop/macosx/native/libawt_lwawt/font/CCharToGlyphMapper.m-56-                      jint count, UniChar *unicodes,
src/java.desktop/macosx/native/libawt_lwawt/font/CCharToGlyphMapper.m-57-                      CGGlyph *cgGlyphs, jintArray glyphs)
src/java.desktop/macosx/native/libawt_lwawt/font/CCharToGlyphMapper.m-58-{
src/java.desktop/macosx/native/libawt_lwawt/font/CCharToGlyphMapper.m:59:    jint *glyphCodeInts = (*env)->GetPrimitiveArrayCritical(env, glyphs, 0);
src/java.desktop/macosx/native/libawt_lwawt/font/CCharToGlyphMapper.m-60-
src/java.desktop/macosx/native/libawt_lwawt/font/CCharToGlyphMapper.m-61-    CTS_GetGlyphsAsIntsForCharacters(awtFont, unicodes,
src/java.desktop/macosx/native/libawt_lwawt/font/CCharToGlyphMapper.m-62-                                     cgGlyphs, glyphCodeInts, count);

src/java.desktop/macosx/native/libosxui/JRSUIController.m:279:    jdouble *rect = (*env)->GetPrimitiveArrayCritical(env, rectArray, NULL);
src/java.desktop/macosx/native/libosxui/JRSUIController.m-280-    rect[0] = partBounds.origin.x;
src/java.desktop/macosx/native/libosxui/JRSUIController.m-281-    rect[1] = partBounds.origin.y;

src/java.desktop/unix/native/libawt_xawt/awt/swing_GTKEngine.c-333-Java_com_sun_java_swing_plaf_gtk_GTKEngine_nativeFinishPainting(
src/java.desktop/unix/native/libawt_xawt/awt/swing_GTKEngine.c-334-        JNIEnv *env, jobject this, jintArray dest, jint width, jint height)
src/java.desktop/unix/native/libawt_xawt/awt/swing_GTKEngine.c-335-{
src/java.desktop/unix/native/libawt_xawt/awt/swing_GTKEngine.c-336-    jint transparency;
src/java.desktop/unix/native/libawt_xawt/awt/swing_GTKEngine.c:337:    gint *buffer = (gint*) (*env)->GetPrimitiveArrayCritical(env, dest, 0);
src/java.desktop/unix/native/libawt_xawt/awt/swing_GTKEngine.c-338-    gtk->gdk_threads_enter();
src/java.desktop/unix/native/libawt_xawt/awt/swing_GTKEngine.c-339-    transparency = gtk->copy_image(buffer, width, height);

src/java.desktop/windows/native/libawt/windows/ThemeReader.cpp-437-        // Copy the resulting pixels to our Java BufferedImage.
src/java.desktop/windows/native/libawt/windows/ThemeReader.cpp:438:        pDstBits = (int *)env->GetPrimitiveArrayCritical(array, 0);
src/java.desktop/windows/native/libawt/windows/ThemeReader.cpp-439-        BOOL transparent = FALSE;
src/java.desktop/windows/native/libawt/windows/ThemeReader.cpp-440-        transparent = IsThemeBackgroundPartiallyTransparentFunc(hTheme, part, state);
src/java.desktop/windows/native/libawt/windows/ThemeReader.cpp-441-        copyDIBToBufferedImage(pDstBits, pSrcBits, transparent, w, h, stride);
src/java.desktop/windows/native/libawt/windows/ThemeReader.cpp-442-        env->ReleasePrimitiveArrayCritical(array, pDstBits, 0);

src/java.desktop/windows/native/libawt/windows/awt_DataTransferer.cpp-164-    LOGPALETTE* pLogPalette =
src/java.desktop/windows/native/libawt/windows/awt_DataTransferer.cpp:165:        (LOGPALETTE*)env->GetPrimitiveArrayCritical(paletteBytes, NULL);
src/java.desktop/windows/native/libawt/windows/awt_DataTransferer.cpp-166-    PALETTEENTRY* pPalEntries = (PALETTEENTRY*)pLogPalette->palPalEntry;

src/java.desktop/windows/native/libawt/windows/awt_Toolkit.cpp:2863:        colorsPtr = (jint *)env->GetPrimitiveArrayCritical(colors, 0);
src/java.desktop/windows/native/libawt/windows/awt_Toolkit.cpp-2864-        for (int i = 0; i < (sizeof indexMap)/(sizeof *indexMap) && i < colorLen; i++) {
src/java.desktop/windows/native/libawt/windows/awt_Toolkit.cpp-2865-            colorsPtr[i] = DesktopColor2RGB(indexMap[i]);
src/java.desktop/windows/native/libawt/windows/awt_Toolkit.cpp-2866-        }

Should I open another jbs issue for them ?

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

PR: https://git.openjdk.org/jdk/pull/11312



More information about the client-libs-dev mailing list