提交 3ec1c1d7 编写于 作者: P pchelko

8031001: [Parfait] warnings from b121 for jdk/src/solaris/native/sun/awt: JNI-related warnings

Reviewed-by: serb, anthony
上级 5a865e63
/* /*
* Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -213,6 +213,8 @@ Java_sun_print_CUPSPrinter_getMedia(JNIEnv *env, ...@@ -213,6 +213,8 @@ Java_sun_print_CUPSPrinter_getMedia(JNIEnv *env,
name = (*env)->GetStringUTFChars(env, printer, NULL); name = (*env)->GetStringUTFChars(env, printer, NULL);
if (name == NULL) { if (name == NULL) {
(*env)->ExceptionClear(env);
JNU_ThrowOutOfMemoryError(env, "Could not create printer name");
return NULL; return NULL;
} }
...@@ -220,12 +222,10 @@ Java_sun_print_CUPSPrinter_getMedia(JNIEnv *env, ...@@ -220,12 +222,10 @@ Java_sun_print_CUPSPrinter_getMedia(JNIEnv *env,
// unlink() must be caled to remove the file when finished using it. // unlink() must be caled to remove the file when finished using it.
filename = j2d_cupsGetPPD(name); filename = j2d_cupsGetPPD(name);
(*env)->ReleaseStringUTFChars(env, printer, name); (*env)->ReleaseStringUTFChars(env, printer, name);
CHECK_NULL_RETURN(filename, NULL);
cls = (*env)->FindClass(env, "java/lang/String"); cls = (*env)->FindClass(env, "java/lang/String");
CHECK_NULL_RETURN(cls, NULL);
if (filename == NULL) {
return NULL;
}
if ((ppd = j2d_ppdOpenFile(filename)) == NULL) { if ((ppd = j2d_ppdOpenFile(filename)) == NULL) {
unlink(filename); unlink(filename);
...@@ -249,6 +249,7 @@ Java_sun_print_CUPSPrinter_getMedia(JNIEnv *env, ...@@ -249,6 +249,7 @@ Java_sun_print_CUPSPrinter_getMedia(JNIEnv *env,
unlink(filename); unlink(filename);
j2d_ppdClose(ppd); j2d_ppdClose(ppd);
DPRINTF("CUPSfuncs::bad alloc new array\n", "") DPRINTF("CUPSfuncs::bad alloc new array\n", "")
(*env)->ExceptionClear(env);
JNU_ThrowOutOfMemoryError(env, "OutOfMemoryError"); JNU_ThrowOutOfMemoryError(env, "OutOfMemoryError");
return NULL; return NULL;
} }
...@@ -323,6 +324,11 @@ Java_sun_print_CUPSPrinter_getPageSizes(JNIEnv *env, ...@@ -323,6 +324,11 @@ Java_sun_print_CUPSPrinter_getPageSizes(JNIEnv *env,
ppd_size_t *size; ppd_size_t *size;
const char *name = (*env)->GetStringUTFChars(env, printer, NULL); const char *name = (*env)->GetStringUTFChars(env, printer, NULL);
if (name == NULL) {
(*env)->ExceptionClear(env);
JNU_ThrowOutOfMemoryError(env, "Could not create printer name");
return NULL;
}
const char *filename; const char *filename;
int i; int i;
jobjectArray sizeArray = NULL; jobjectArray sizeArray = NULL;
...@@ -332,9 +338,7 @@ Java_sun_print_CUPSPrinter_getPageSizes(JNIEnv *env, ...@@ -332,9 +338,7 @@ Java_sun_print_CUPSPrinter_getPageSizes(JNIEnv *env,
// unlink() must be called to remove the file after using it. // unlink() must be called to remove the file after using it.
filename = j2d_cupsGetPPD(name); filename = j2d_cupsGetPPD(name);
(*env)->ReleaseStringUTFChars(env, printer, name); (*env)->ReleaseStringUTFChars(env, printer, name);
if (filename == NULL) { CHECK_NULL_RETURN(filename, NULL);
return NULL;
}
if ((ppd = j2d_ppdOpenFile(filename)) == NULL) { if ((ppd = j2d_ppdOpenFile(filename)) == NULL) {
unlink(filename); unlink(filename);
DPRINTF("unable to open PPD %s\n", filename) DPRINTF("unable to open PPD %s\n", filename)
...@@ -350,11 +354,19 @@ Java_sun_print_CUPSPrinter_getPageSizes(JNIEnv *env, ...@@ -350,11 +354,19 @@ Java_sun_print_CUPSPrinter_getPageSizes(JNIEnv *env,
unlink(filename); unlink(filename);
j2d_ppdClose(ppd); j2d_ppdClose(ppd);
DPRINTF("CUPSfuncs::bad alloc new float array\n", "") DPRINTF("CUPSfuncs::bad alloc new float array\n", "")
(*env)->ExceptionClear(env);
JNU_ThrowOutOfMemoryError(env, "OutOfMemoryError"); JNU_ThrowOutOfMemoryError(env, "OutOfMemoryError");
return NULL; return NULL;
} }
dims = (*env)->GetFloatArrayElements(env, sizeArray, NULL); dims = (*env)->GetFloatArrayElements(env, sizeArray, NULL);
if (dims == NULL) {
unlink(filename);
j2d_ppdClose(ppd);
(*env)->ExceptionClear(env);
JNU_ThrowOutOfMemoryError(env, "Could not create printer name");
return NULL;
}
for (i = 0; i<option->num_choices; i++) { for (i = 0; i<option->num_choices; i++) {
choice = (option->choices)+i; choice = (option->choices)+i;
size = j2d_ppdPageSize(ppd, choice->choice); size = j2d_ppdPageSize(ppd, choice->choice);
......
/* /*
* Copyright (c) 1995, 2012, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1995, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -892,11 +892,10 @@ jobject getColorSpace(JNIEnv* env, jint csID) { ...@@ -892,11 +892,10 @@ jobject getColorSpace(JNIEnv* env, jint csID) {
jmethodID mid; jmethodID mid;
clazz = (*env)->FindClass(env,"java/awt/color/ColorSpace"); clazz = (*env)->FindClass(env,"java/awt/color/ColorSpace");
CHECK_NULL_RETURN(clazz, NULL);
mid = (*env)->GetStaticMethodID(env, clazz, "getInstance", mid = (*env)->GetStaticMethodID(env, clazz, "getInstance",
"(I)Ljava/awt/color/ColorSpace;"); "(I)Ljava/awt/color/ColorSpace;");
if (mid == NULL) { CHECK_NULL_RETURN(mid, NULL);
return NULL;
}
/* SECURITY: This is safe, because static methods cannot /* SECURITY: This is safe, because static methods cannot
* be overridden, and this method does not invoke * be overridden, and this method does not invoke
...@@ -919,6 +918,11 @@ jobject awtJNI_GetColorModel(JNIEnv *env, AwtGraphicsConfigDataPtr aData) ...@@ -919,6 +918,11 @@ jobject awtJNI_GetColorModel(JNIEnv *env, AwtGraphicsConfigDataPtr aData)
(aData->awt_depth >= 15)) (aData->awt_depth >= 15))
{ {
clazz = (*env)->FindClass(env,"java/awt/image/DirectColorModel"); clazz = (*env)->FindClass(env,"java/awt/image/DirectColorModel");
if (clazz == NULL) {
(*env)->PopLocalFrame(env, 0);
return NULL;
}
if (!aData->isTranslucencySupported) { if (!aData->isTranslucencySupported) {
mid = (*env)->GetMethodID(env,clazz,"<init>","(IIIII)V"); mid = (*env)->GetMethodID(env,clazz,"<init>","(IIIII)V");
...@@ -1005,6 +1009,10 @@ jobject awtJNI_GetColorModel(JNIEnv *env, AwtGraphicsConfigDataPtr aData) ...@@ -1005,6 +1009,10 @@ jobject awtJNI_GetColorModel(JNIEnv *env, AwtGraphicsConfigDataPtr aData)
} }
clazz = (*env)->FindClass(env,"java/awt/image/ComponentColorModel"); clazz = (*env)->FindClass(env,"java/awt/image/ComponentColorModel");
if (clazz == NULL) {
(*env)->PopLocalFrame(env, 0);
return NULL;
}
mid = (*env)->GetMethodID(env,clazz,"<init>", mid = (*env)->GetMethodID(env,clazz,"<init>",
"(Ljava/awt/color/ColorSpace;[IZZII)V"); "(Ljava/awt/color/ColorSpace;[IZZII)V");
...@@ -1253,6 +1261,7 @@ int awtJNI_GetColorForVis (JNIEnv *env,jobject this, AwtGraphicsConfigDataPtr aw ...@@ -1253,6 +1261,7 @@ int awtJNI_GetColorForVis (JNIEnv *env,jobject this, AwtGraphicsConfigDataPtr aw
if (!JNU_IsNull(env,this)) if (!JNU_IsNull(env,this))
{ {
SYSCLR_class = (*env)->FindClass(env, "java/awt/SystemColor"); SYSCLR_class = (*env)->FindClass(env, "java/awt/SystemColor");
CHECK_NULL_RETURN(SYSCLR_class, 0);
if ((*env)->IsInstanceOf(env, this, SYSCLR_class)) { if ((*env)->IsInstanceOf(env, this, SYSCLR_class)) {
/* SECURITY: This is safe, because there is no way /* SECURITY: This is safe, because there is no way
...@@ -1264,6 +1273,7 @@ int awtJNI_GetColorForVis (JNIEnv *env,jobject this, AwtGraphicsConfigDataPtr aw ...@@ -1264,6 +1273,7 @@ int awtJNI_GetColorForVis (JNIEnv *env,jobject this, AwtGraphicsConfigDataPtr aw
,this ,this
,"getRGB" ,"getRGB"
,"()I").i; ,"()I").i;
JNU_CHECK_EXCEPTION_RETURN(env, 0);
} else { } else {
col = (int)(*env)->GetIntField(env,this,colorValueID); col = (int)(*env)->GetIntField(env,this,colorValueID);
} }
...@@ -1370,6 +1380,8 @@ awtJNI_CreateColorData(JNIEnv *env, AwtGraphicsConfigDataPtr adata, ...@@ -1370,6 +1380,8 @@ awtJNI_CreateColorData(JNIEnv *env, AwtGraphicsConfigDataPtr adata,
AWT_UNLOCK (); AWT_UNLOCK ();
} }
sysColors = (*env)->FindClass (env, "java/awt/SystemColor"); sysColors = (*env)->FindClass (env, "java/awt/SystemColor");
CHECK_NULL(sysColors);
if (lock) { if (lock) {
AWT_LOCK (); AWT_LOCK ();
} }
...@@ -1377,6 +1389,13 @@ awtJNI_CreateColorData(JNIEnv *env, AwtGraphicsConfigDataPtr adata, ...@@ -1377,6 +1389,13 @@ awtJNI_CreateColorData(JNIEnv *env, AwtGraphicsConfigDataPtr adata,
"systemColors", "systemColors",
"[I"); "[I");
if (colorID == NULL) {
if (lock) {
AWT_UNLOCK();
}
return;
}
colors = (jintArray) (*env)->GetStaticObjectField colors = (jintArray) (*env)->GetStaticObjectField
(env, sysColors, colorID); (env, sysColors, colorID);
......
/* /*
* Copyright (c) 1995, 2011, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1995, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -77,8 +77,22 @@ extern void awt_output_flush(); ...@@ -77,8 +77,22 @@ extern void awt_output_flush();
#define AWT_LOCK_IMPL() \ #define AWT_LOCK_IMPL() \
(*env)->CallStaticVoidMethod(env, tkClass, awtLockMID) (*env)->CallStaticVoidMethod(env, tkClass, awtLockMID)
#define AWT_NOFLUSH_UNLOCK_IMPL() \ #define AWT_NOFLUSH_UNLOCK_IMPL() \
(*env)->CallStaticVoidMethod(env, tkClass, awtUnlockMID) do { \
jthrowable pendingException; \
if ((pendingException = (*env)->ExceptionOccurred(env)) != NULL) { \
(*env)->ExceptionClear(env); \
} \
(*env)->CallStaticVoidMethod(env, tkClass, awtUnlockMID); \
if (pendingException) { \
if ((*env)->ExceptionCheck(env)) { \
(*env)->ExceptionDescribe(env); \
(*env)->ExceptionClear(env); \
} \
(*env)->Throw(env, pendingException); \
} \
} while (0)
#define AWT_WAIT_IMPL(tm) \ #define AWT_WAIT_IMPL(tm) \
(*env)->CallStaticVoidMethod(env, tkClass, awtWaitMID, (jlong)(tm)) (*env)->CallStaticVoidMethod(env, tkClass, awtWaitMID, (jlong)(tm))
#define AWT_NOTIFY_IMPL() \ #define AWT_NOTIFY_IMPL() \
......
/* /*
* Copyright (c) 1998, 2011, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -49,22 +49,22 @@ struct KeyEventIDs keyEventIDs; ...@@ -49,22 +49,22 @@ struct KeyEventIDs keyEventIDs;
JNIEXPORT void JNICALL JNIEXPORT void JNICALL
Java_java_awt_AWTEvent_initIDs(JNIEnv *env, jclass cls) Java_java_awt_AWTEvent_initIDs(JNIEnv *env, jclass cls)
{ {
awtEventIDs.bdata = (*env)->GetFieldID(env, cls, "bdata", "[B"); CHECK_NULL(awtEventIDs.bdata = (*env)->GetFieldID(env, cls, "bdata", "[B"));
awtEventIDs.consumed = (*env)->GetFieldID(env, cls, "consumed", "Z"); CHECK_NULL(awtEventIDs.consumed = (*env)->GetFieldID(env, cls, "consumed", "Z"));
awtEventIDs.id = (*env)->GetFieldID(env, cls, "id", "I"); CHECK_NULL(awtEventIDs.id = (*env)->GetFieldID(env, cls, "id", "I"));
} }
JNIEXPORT void JNICALL JNIEXPORT void JNICALL
Java_java_awt_event_InputEvent_initIDs(JNIEnv *env, jclass cls) Java_java_awt_event_InputEvent_initIDs(JNIEnv *env, jclass cls)
{ {
inputEventIDs.modifiers = (*env)->GetFieldID(env, cls, "modifiers", "I"); CHECK_NULL(inputEventIDs.modifiers = (*env)->GetFieldID(env, cls, "modifiers", "I"));
} }
JNIEXPORT void JNICALL JNIEXPORT void JNICALL
Java_java_awt_event_KeyEvent_initIDs(JNIEnv *env, jclass cls) Java_java_awt_event_KeyEvent_initIDs(JNIEnv *env, jclass cls)
{ {
keyEventIDs.keyCode = (*env)->GetFieldID(env, cls, "keyCode", "I"); CHECK_NULL(keyEventIDs.keyCode = (*env)->GetFieldID(env, cls, "keyCode", "I"));
keyEventIDs.keyChar = (*env)->GetFieldID(env, cls, "keyChar", "C"); CHECK_NULL(keyEventIDs.keyChar = (*env)->GetFieldID(env, cls, "keyChar", "C"));
} }
JNIEXPORT void JNICALL JNIEXPORT void JNICALL
......
/* /*
* Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1996, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -78,6 +78,8 @@ JNIEXPORT jint JNICALL awt_DrawingSurface_Lock(JAWT_DrawingSurface* ds) ...@@ -78,6 +78,8 @@ JNIEXPORT jint JNICALL awt_DrawingSurface_Lock(JAWT_DrawingSurface* ds)
/* Make sure the target is a java.awt.Component */ /* Make sure the target is a java.awt.Component */
componentClass = (*env)->FindClass(env, "java/awt/Component"); componentClass = (*env)->FindClass(env, "java/awt/Component");
CHECK_NULL_RETURN(componentClass, (jint)JAWT_LOCK_ERROR);
if (!(*env)->IsInstanceOf(env, target, componentClass)) { if (!(*env)->IsInstanceOf(env, target, componentClass)) {
#ifdef DEBUG #ifdef DEBUG
fprintf(stderr, "Target is not a component\n"); fprintf(stderr, "Target is not a component\n");
...@@ -126,6 +128,8 @@ JNIEXPORT int32_t JNICALL ...@@ -126,6 +128,8 @@ JNIEXPORT int32_t JNICALL
/* Make sure the target is a java.awt.Component */ /* Make sure the target is a java.awt.Component */
componentClass = (*env)->FindClass(env, "java/awt/Component"); componentClass = (*env)->FindClass(env, "java/awt/Component");
CHECK_NULL_RETURN(componentClass, (int32_t) 0);
if (!(*env)->IsInstanceOf(env, target, componentClass)) { if (!(*env)->IsInstanceOf(env, target, componentClass)) {
#ifdef DEBUG #ifdef DEBUG
fprintf(stderr, "DrawingSurface target must be a component\n"); fprintf(stderr, "DrawingSurface target must be a component\n");
...@@ -195,6 +199,8 @@ awt_DrawingSurface_GetDrawingSurfaceInfo(JAWT_DrawingSurface* ds) ...@@ -195,6 +199,8 @@ awt_DrawingSurface_GetDrawingSurfaceInfo(JAWT_DrawingSurface* ds)
/* Make sure the target is a java.awt.Component */ /* Make sure the target is a java.awt.Component */
componentClass = (*env)->FindClass(env, "java/awt/Component"); componentClass = (*env)->FindClass(env, "java/awt/Component");
CHECK_NULL_RETURN(componentClass, NULL);
if (!(*env)->IsInstanceOf(env, target, componentClass)) { if (!(*env)->IsInstanceOf(env, target, componentClass)) {
#ifdef DEBUG #ifdef DEBUG
fprintf(stderr, "DrawingSurface target must be a component\n"); fprintf(stderr, "DrawingSurface target must be a component\n");
...@@ -292,6 +298,8 @@ JNIEXPORT JAWT_DrawingSurface* JNICALL ...@@ -292,6 +298,8 @@ JNIEXPORT JAWT_DrawingSurface* JNICALL
/* Make sure the target component is a java.awt.Component */ /* Make sure the target component is a java.awt.Component */
componentClass = (*env)->FindClass(env, "java/awt/Component"); componentClass = (*env)->FindClass(env, "java/awt/Component");
CHECK_NULL_RETURN(componentClass, NULL);
if (!(*env)->IsInstanceOf(env, target, componentClass)) { if (!(*env)->IsInstanceOf(env, target, componentClass)) {
#ifdef DEBUG #ifdef DEBUG
fprintf(stderr, fprintf(stderr,
...@@ -354,6 +362,10 @@ JNIEXPORT jobject JNICALL ...@@ -354,6 +362,10 @@ JNIEXPORT jobject JNICALL
if (window != None) { if (window != None) {
peer = JNU_CallStaticMethodByName(env, NULL, "sun/awt/X11/XToolkit", peer = JNU_CallStaticMethodByName(env, NULL, "sun/awt/X11/XToolkit",
"windowToXWindow", "(J)Lsun/awt/X11/XBaseWindow;", (jlong)window).l; "windowToXWindow", "(J)Lsun/awt/X11/XBaseWindow;", (jlong)window).l;
if ((*env)->ExceptionCheck(env)) {
AWT_UNLOCK();
return (jobject)NULL;
}
} }
if ((peer != NULL) && if ((peer != NULL) &&
(JNU_IsInstanceOfByName(env, peer, "sun/awt/X11/XWindow") == 1)) { (JNU_IsInstanceOfByName(env, peer, "sun/awt/X11/XWindow") == 1)) {
...@@ -361,6 +373,7 @@ JNIEXPORT jobject JNICALL ...@@ -361,6 +373,7 @@ JNIEXPORT jobject JNICALL
} }
if (target == NULL) { if (target == NULL) {
(*env)->ExceptionClear(env);
JNU_ThrowNullPointerException(env, "NullPointerException"); JNU_ThrowNullPointerException(env, "NullPointerException");
AWT_UNLOCK(); AWT_UNLOCK();
return (jobject)NULL; return (jobject)NULL;
......
/* /*
* Copyright (c) 1995, 2012, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1995, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -86,14 +86,13 @@ Java_java_awt_Font_initIDs ...@@ -86,14 +86,13 @@ Java_java_awt_Font_initIDs
#ifndef HEADLESS #ifndef HEADLESS
/** We call "NoClientCode" methods because they won't invoke client /** We call "NoClientCode" methods because they won't invoke client
code on the privileged toolkit thread **/ code on the privileged toolkit thread **/
fontIDs.pData = (*env)->GetFieldID(env, cls, "pData", "J"); CHECK_NULL(fontIDs.pData = (*env)->GetFieldID(env, cls, "pData", "J"));
fontIDs.style = (*env)->GetFieldID(env, cls, "style", "I"); CHECK_NULL(fontIDs.style = (*env)->GetFieldID(env, cls, "style", "I"));
fontIDs.size = (*env)->GetFieldID(env, cls, "size", "I"); CHECK_NULL(fontIDs.size = (*env)->GetFieldID(env, cls, "size", "I"));
fontIDs.getPeer = (*env)->GetMethodID(env, cls, "getPeer_NoClientCode", CHECK_NULL(fontIDs.getPeer = (*env)->GetMethodID(env, cls, "getPeer_NoClientCode",
"()Ljava/awt/peer/FontPeer;"); "()Ljava/awt/peer/FontPeer;"));
fontIDs.getFamily = CHECK_NULL(fontIDs.getFamily = (*env)->GetMethodID(env, cls, "getFamily_NoClientCode",
(*env)->GetMethodID(env, cls, "getFamily_NoClientCode", "()Ljava/lang/String;"));
"()Ljava/lang/String;");
#endif /* !HEADLESS */ #endif /* !HEADLESS */
} }
...@@ -120,12 +119,10 @@ Java_sun_awt_FontDescriptor_initIDs ...@@ -120,12 +119,10 @@ Java_sun_awt_FontDescriptor_initIDs
(JNIEnv *env, jclass cls) (JNIEnv *env, jclass cls)
{ {
#ifndef HEADLESS #ifndef HEADLESS
fontDescriptorIDs.nativeName = CHECK_NULL(fontDescriptorIDs.nativeName =
(*env)->GetFieldID(env, cls, "nativeName", (*env)->GetFieldID(env, cls, "nativeName", "Ljava/lang/String;"));
"Ljava/lang/String;"); CHECK_NULL(fontDescriptorIDs.charsetName =
fontDescriptorIDs.charsetName = (*env)->GetFieldID(env, cls, "charsetName", "Ljava/lang/String;"));
(*env)->GetFieldID(env, cls, "charsetName",
"Ljava/lang/String;");
#endif /* !HEADLESS */ #endif /* !HEADLESS */
} }
...@@ -144,20 +141,18 @@ Java_sun_awt_PlatformFont_initIDs ...@@ -144,20 +141,18 @@ Java_sun_awt_PlatformFont_initIDs
(JNIEnv *env, jclass cls) (JNIEnv *env, jclass cls)
{ {
#ifndef HEADLESS #ifndef HEADLESS
platformFontIDs.componentFonts = CHECK_NULL(platformFontIDs.componentFonts =
(*env)->GetFieldID(env, cls, "componentFonts", (*env)->GetFieldID(env, cls, "componentFonts",
"[Lsun/awt/FontDescriptor;"); "[Lsun/awt/FontDescriptor;"));
platformFontIDs.fontConfig = CHECK_NULL(platformFontIDs.fontConfig =
(*env)->GetFieldID(env,cls, "fontConfig", (*env)->GetFieldID(env,cls, "fontConfig",
"Lsun/awt/FontConfiguration;"); "Lsun/awt/FontConfiguration;"));
CHECK_NULL(platformFontIDs.makeConvertedMultiFontString =
platformFontIDs.makeConvertedMultiFontString = (*env)->GetMethodID(env, cls, "makeConvertedMultiFontString",
(*env)->GetMethodID(env, cls, "makeConvertedMultiFontString", "(Ljava/lang/String;)[Ljava/lang/Object;"));
"(Ljava/lang/String;)[Ljava/lang/Object;"); CHECK_NULL(platformFontIDs.makeConvertedMultiFontChars =
(*env)->GetMethodID(env, cls, "makeConvertedMultiFontChars",
platformFontIDs.makeConvertedMultiFontChars = "([CII)[Ljava/lang/Object;"));
(*env)->GetMethodID(env, cls, "makeConvertedMultiFontChars",
"([CII)[Ljava/lang/Object;");
#endif /* !HEADLESS */ #endif /* !HEADLESS */
} }
...@@ -385,6 +380,11 @@ awtJNI_FontName(JNIEnv * env, jstring name, char **foundry, char **facename, cha ...@@ -385,6 +380,11 @@ awtJNI_FontName(JNIEnv * env, jstring name, char **foundry, char **facename, cha
return 0; return 0;
} }
cname = (char *) JNU_GetStringPlatformChars(env, name, NULL); cname = (char *) JNU_GetStringPlatformChars(env, name, NULL);
if (cname == NULL) {
(*env)->ExceptionClear(env);
JNU_ThrowOutOfMemoryError(env, "Could not create font name");
return 0;
}
/* additional default font names */ /* additional default font names */
if (strcmp(cname, "serif") == 0) { if (strcmp(cname, "serif") == 0) {
...@@ -448,6 +448,8 @@ awtJNI_GetFontData(JNIEnv * env, jobject font, char **errmsg) ...@@ -448,6 +448,8 @@ awtJNI_GetFontData(JNIEnv * env, jobject font, char **errmsg)
} }
if (!JNU_IsNull(env, font) && awtJNI_IsMultiFont(env, font)) { if (!JNU_IsNull(env, font) && awtJNI_IsMultiFont(env, font)) {
JNU_CHECK_EXCEPTION_RETURN(env, NULL);
struct FontData *fdata = NULL; struct FontData *fdata = NULL;
int32_t i, size; int32_t i, size;
char *fontsetname = NULL; char *fontsetname = NULL;
...@@ -513,6 +515,11 @@ awtJNI_GetFontData(JNIEnv * env, jobject font, char **errmsg) ...@@ -513,6 +515,11 @@ awtJNI_GetFontData(JNIEnv * env, jobject font, char **errmsg)
fdata->flist[i].charset_name = (char *) fdata->flist[i].charset_name = (char *)
JNU_GetStringPlatformChars(env, charsetName, NULL); JNU_GetStringPlatformChars(env, charsetName, NULL);
if (fdata->flist[i].charset_name == NULL) {
(*env)->ExceptionClear(env);
JNU_ThrowOutOfMemoryError(env, "Could not create charset name");
return NULL;
}
/* We are done with the objects. */ /* We are done with the objects. */
(*env)->DeleteLocalRef(env, fontDescriptor); (*env)->DeleteLocalRef(env, fontDescriptor);
......
/* /*
* Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -152,8 +152,11 @@ Java_sun_awt_X11GraphicsConfig_initIDs (JNIEnv *env, jclass cls) ...@@ -152,8 +152,11 @@ Java_sun_awt_X11GraphicsConfig_initIDs (JNIEnv *env, jclass cls)
x11GraphicsConfigIDs.screen = NULL; x11GraphicsConfigIDs.screen = NULL;
x11GraphicsConfigIDs.aData = (*env)->GetFieldID (env, cls, "aData", "J"); x11GraphicsConfigIDs.aData = (*env)->GetFieldID (env, cls, "aData", "J");
CHECK_NULL(x11GraphicsConfigIDs.aData);
x11GraphicsConfigIDs.bitsPerPixel = (*env)->GetFieldID (env, cls, "bitsPerPixel", "I"); x11GraphicsConfigIDs.bitsPerPixel = (*env)->GetFieldID (env, cls, "bitsPerPixel", "I");
CHECK_NULL(x11GraphicsConfigIDs.bitsPerPixel);
x11GraphicsConfigIDs.screen = (*env)->GetFieldID (env, cls, "screen", "Lsun/awt/X11GraphicsDevice;"); x11GraphicsConfigIDs.screen = (*env)->GetFieldID (env, cls, "screen", "Lsun/awt/X11GraphicsDevice;");
CHECK_NULL(x11GraphicsConfigIDs.screen);
if (x11GraphicsConfigIDs.aData == NULL || if (x11GraphicsConfigIDs.aData == NULL ||
x11GraphicsConfigIDs.bitsPerPixel == NULL || x11GraphicsConfigIDs.bitsPerPixel == NULL ||
...@@ -1346,7 +1349,6 @@ JNIEnv *env, jobject this) ...@@ -1346,7 +1349,6 @@ JNIEnv *env, jobject this)
/* Make Color Model object for this GraphicsConfiguration */ /* Make Color Model object for this GraphicsConfiguration */
colorModel = awtJNI_GetColorModel (env, adata); colorModel = awtJNI_GetColorModel (env, adata);
AWT_UNLOCK (); AWT_UNLOCK ();
return colorModel; return colorModel;
...@@ -1374,6 +1376,7 @@ Java_sun_awt_X11GraphicsConfig_pGetBounds(JNIEnv *env, jobject this, jint screen ...@@ -1374,6 +1376,7 @@ Java_sun_awt_X11GraphicsConfig_pGetBounds(JNIEnv *env, jobject this, jint screen
JNU_GetLongFieldAsPtr(env, this, x11GraphicsConfigIDs.aData); JNU_GetLongFieldAsPtr(env, this, x11GraphicsConfigIDs.aData);
clazz = (*env)->FindClass(env, "java/awt/Rectangle"); clazz = (*env)->FindClass(env, "java/awt/Rectangle");
CHECK_NULL_RETURN(clazz, NULL);
mid = (*env)->GetMethodID(env, clazz, "<init>", "(IIII)V"); mid = (*env)->GetMethodID(env, clazz, "<init>", "(IIII)V");
if (mid != NULL) { if (mid != NULL) {
if (usingXinerama) { if (usingXinerama) {
...@@ -1543,7 +1546,7 @@ Java_sun_awt_X11GraphicsDevice_getDoubleBufferVisuals(JNIEnv *env, ...@@ -1543,7 +1546,7 @@ Java_sun_awt_X11GraphicsDevice_getDoubleBufferVisuals(JNIEnv *env,
clazz = (*env)->GetObjectClass(env, this); clazz = (*env)->GetObjectClass(env, this);
midAddVisual = (*env)->GetMethodID(env, clazz, "addDoubleBufferVisual", midAddVisual = (*env)->GetMethodID(env, clazz, "addDoubleBufferVisual",
"(I)V"); "(I)V");
CHECK_NULL(midAddVisual);
AWT_LOCK(); AWT_LOCK();
rootWindow = RootWindow(awt_display, xinawareScreen); rootWindow = RootWindow(awt_display, xinawareScreen);
visScreenInfo = XdbeGetVisualInfo(awt_display, &rootWindow, &n); visScreenInfo = XdbeGetVisualInfo(awt_display, &rootWindow, &n);
...@@ -1739,6 +1742,7 @@ X11GD_CreateDisplayMode(JNIEnv *env, jint width, jint height, ...@@ -1739,6 +1742,7 @@ X11GD_CreateDisplayMode(JNIEnv *env, jint width, jint height,
jint validRefreshRate = refreshRate; jint validRefreshRate = refreshRate;
displayModeClass = (*env)->FindClass(env, "java/awt/DisplayMode"); displayModeClass = (*env)->FindClass(env, "java/awt/DisplayMode");
CHECK_NULL_RETURN(displayModeClass, NULL);
if (JNU_IsNull(env, displayModeClass)) { if (JNU_IsNull(env, displayModeClass)) {
JNU_ThrowInternalError(env, JNU_ThrowInternalError(env,
"Could not get display mode class"); "Could not get display mode class");
...@@ -1746,6 +1750,7 @@ X11GD_CreateDisplayMode(JNIEnv *env, jint width, jint height, ...@@ -1746,6 +1750,7 @@ X11GD_CreateDisplayMode(JNIEnv *env, jint width, jint height,
} }
cid = (*env)->GetMethodID(env, displayModeClass, "<init>", "(IIII)V"); cid = (*env)->GetMethodID(env, displayModeClass, "<init>", "(IIII)V");
CHECK_NULL_RETURN(cid, NULL);
if (cid == NULL) { if (cid == NULL) {
JNU_ThrowInternalError(env, JNU_ThrowInternalError(env,
"Could not get display mode constructor"); "Could not get display mode constructor");
...@@ -1779,6 +1784,7 @@ X11GD_AddDisplayMode(JNIEnv *env, jobject arrayList, ...@@ -1779,6 +1784,7 @@ X11GD_AddDisplayMode(JNIEnv *env, jobject arrayList,
} }
mid = (*env)->GetMethodID(env, arrayListClass, "add", mid = (*env)->GetMethodID(env, arrayListClass, "add",
"(Ljava/lang/Object;)Z"); "(Ljava/lang/Object;)Z");
CHECK_NULL(mid);
if (mid == NULL) { if (mid == NULL) {
JNU_ThrowInternalError(env, JNU_ThrowInternalError(env,
"Could not get method java.util.ArrayList.add()"); "Could not get method java.util.ArrayList.add()");
...@@ -1955,6 +1961,9 @@ Java_sun_awt_X11GraphicsDevice_enumDisplayModes ...@@ -1955,6 +1961,9 @@ Java_sun_awt_X11GraphicsDevice_enumDisplayModes
size.height, size.height,
BIT_DEPTH_MULTI, BIT_DEPTH_MULTI,
rates[j]); rates[j]);
if ((*env)->ExceptionCheck(env)) {
break;
}
} }
} }
} }
......
/* /*
* Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -319,6 +319,7 @@ static X11InputMethodData * getX11InputMethodData(JNIEnv * env, jobject imInstan ...@@ -319,6 +319,7 @@ static X11InputMethodData * getX11InputMethodData(JNIEnv * env, jobject imInstan
JNU_CallMethodByName(env, NULL, pX11IMData->x11inputmethod, JNU_CallMethodByName(env, NULL, pX11IMData->x11inputmethod,
"flushText", "flushText",
"()V"); "()V");
JNU_CHECK_EXCEPTION_RETURN(env, NULL);
/* IMPORTANT: /* IMPORTANT:
The order of the following calls is critical since "imInstance" may The order of the following calls is critical since "imInstance" may
point to the global reference itself, if "freeX11InputMethodData" is called point to the global reference itself, if "freeX11InputMethodData" is called
...@@ -1120,6 +1121,9 @@ PreeditDrawCallback(XIC ic, XPointer client_data, ...@@ -1120,6 +1121,9 @@ PreeditDrawCallback(XIC ic, XPointer client_data,
if (text->string.multi_byte != NULL) { if (text->string.multi_byte != NULL) {
if (pre_draw->text->encoding_is_wchar == False) { if (pre_draw->text->encoding_is_wchar == False) {
javastr = JNU_NewStringPlatform(env, (const char *)text->string.multi_byte); javastr = JNU_NewStringPlatform(env, (const char *)text->string.multi_byte);
if (javastr == NULL) {
goto finally;
}
} else { } else {
char *mbstr = wcstombsdmp(text->string.wide_char, text->length); char *mbstr = wcstombsdmp(text->string.wide_char, text->length);
if (mbstr == NULL) { if (mbstr == NULL) {
...@@ -1127,6 +1131,9 @@ PreeditDrawCallback(XIC ic, XPointer client_data, ...@@ -1127,6 +1131,9 @@ PreeditDrawCallback(XIC ic, XPointer client_data,
} }
javastr = JNU_NewStringPlatform(env, (const char *)mbstr); javastr = JNU_NewStringPlatform(env, (const char *)mbstr);
free(mbstr); free(mbstr);
if (javastr == NULL) {
goto finally;
}
} }
} }
if (text->feedback != NULL) { if (text->feedback != NULL) {
...@@ -1135,6 +1142,7 @@ PreeditDrawCallback(XIC ic, XPointer client_data, ...@@ -1135,6 +1142,7 @@ PreeditDrawCallback(XIC ic, XPointer client_data,
style = (*env)->NewIntArray(env, text->length); style = (*env)->NewIntArray(env, text->length);
if (JNU_IsNull(env, style)) { if (JNU_IsNull(env, style)) {
(*env)->ExceptionClear(env);
THROW_OUT_OF_MEMORY_ERROR(); THROW_OUT_OF_MEMORY_ERROR();
goto finally; goto finally;
} }
...@@ -1395,14 +1403,17 @@ Java_sun_awt_X11_XInputMethod_createXICNative(JNIEnv *env, ...@@ -1395,14 +1403,17 @@ Java_sun_awt_X11_XInputMethod_createXICNative(JNIEnv *env,
pX11IMData->lookup_buf = 0; pX11IMData->lookup_buf = 0;
pX11IMData->lookup_buf_len = 0; pX11IMData->lookup_buf_len = 0;
if (createXIC(env, pX11IMData, (Window)window) if (createXIC(env, pX11IMData, (Window)window) == False) {
== False) {
destroyX11InputMethodData((JNIEnv *) NULL, pX11IMData); destroyX11InputMethodData((JNIEnv *) NULL, pX11IMData);
pX11IMData = (X11InputMethodData *) NULL; pX11IMData = (X11InputMethodData *) NULL;
if ((*env)->ExceptionCheck(env)) {
goto finally;
}
} }
setX11InputMethodData(env, this, pX11IMData); setX11InputMethodData(env, this, pX11IMData);
finally:
AWT_UNLOCK(); AWT_UNLOCK();
return (pX11IMData != NULL); return (pX11IMData != NULL);
} }
......
/* /*
* Copyright (c) 1998, 2001, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -34,8 +34,8 @@ struct InsetsIDs insetsIDs; ...@@ -34,8 +34,8 @@ struct InsetsIDs insetsIDs;
JNIEXPORT void JNICALL JNIEXPORT void JNICALL
Java_java_awt_Insets_initIDs(JNIEnv *env, jclass cls) Java_java_awt_Insets_initIDs(JNIEnv *env, jclass cls)
{ {
insetsIDs.top = (*env)->GetFieldID(env, cls, "top", "I"); CHECK_NULL(insetsIDs.top = (*env)->GetFieldID(env, cls, "top", "I"));
insetsIDs.bottom = (*env)->GetFieldID(env, cls, "bottom", "I"); CHECK_NULL(insetsIDs.bottom = (*env)->GetFieldID(env, cls, "bottom", "I"));
insetsIDs.left = (*env)->GetFieldID(env, cls, "left", "I"); CHECK_NULL(insetsIDs.left = (*env)->GetFieldID(env, cls, "left", "I"));
insetsIDs.right = (*env)->GetFieldID(env, cls, "right", "I"); CHECK_NULL(insetsIDs.right = (*env)->GetFieldID(env, cls, "right", "I"));
} }
...@@ -77,11 +77,16 @@ JNIEXPORT jboolean JNICALL AWTIsHeadless() { ...@@ -77,11 +77,16 @@ JNIEXPORT jboolean JNICALL AWTIsHeadless() {
return isHeadless; return isHeadless;
} }
#define CHECK_EXCEPTION_FATAL(env, message) \
if ((*env)->ExceptionCheck(env)) { \
(*env)->ExceptionClear(env); \
(*env)->FatalError(env, message); \
}
/* /*
* Pathnames to the various awt toolkits * Pathnames to the various awt toolkits
*/ */
#ifdef MACOSX #ifdef MACOSX
#define LWAWT_PATH "/libawt_lwawt.dylib" #define LWAWT_PATH "/libawt_lwawt.dylib"
#define DEFAULT_PATH LWAWT_PATH #define DEFAULT_PATH LWAWT_PATH
...@@ -125,6 +130,8 @@ AWT_OnLoad(JavaVM *vm, void *reserved) ...@@ -125,6 +130,8 @@ AWT_OnLoad(JavaVM *vm, void *reserved)
*/ */
fmProp = (*env)->NewStringUTF(env, "sun.font.fontmanager"); fmProp = (*env)->NewStringUTF(env, "sun.font.fontmanager");
CHECK_EXCEPTION_FATAL(env, "Could not allocate font manager property");
#ifdef MACOSX #ifdef MACOSX
fmanager = (*env)->NewStringUTF(env, "sun.font.CFontManager"); fmanager = (*env)->NewStringUTF(env, "sun.font.CFontManager");
tk = LWAWT_PATH; tk = LWAWT_PATH;
...@@ -132,10 +139,13 @@ AWT_OnLoad(JavaVM *vm, void *reserved) ...@@ -132,10 +139,13 @@ AWT_OnLoad(JavaVM *vm, void *reserved)
fmanager = (*env)->NewStringUTF(env, "sun.awt.X11FontManager"); fmanager = (*env)->NewStringUTF(env, "sun.awt.X11FontManager");
tk = XAWT_PATH; tk = XAWT_PATH;
#endif #endif
CHECK_EXCEPTION_FATAL(env, "Could not allocate font manager name");
if (fmanager && fmProp) { if (fmanager && fmProp) {
JNU_CallStaticMethodByName(env, NULL, "java/lang/System", "setProperty", JNU_CallStaticMethodByName(env, NULL, "java/lang/System", "setProperty",
"(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;", "(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;",
fmProp, fmanager); fmProp, fmanager);
CHECK_EXCEPTION_FATAL(env, "Could not allocate set properties");
} }
#ifndef MACOSX #ifndef MACOSX
...@@ -154,9 +164,11 @@ AWT_OnLoad(JavaVM *vm, void *reserved) ...@@ -154,9 +164,11 @@ AWT_OnLoad(JavaVM *vm, void *reserved)
(*env)->DeleteLocalRef(env, fmanager); (*env)->DeleteLocalRef(env, fmanager);
} }
jstring jbuf = JNU_NewStringPlatform(env, buf);
CHECK_EXCEPTION_FATAL(env, "Could not allocate library name");
JNU_CallStaticMethodByName(env, NULL, "java/lang/System", "load", JNU_CallStaticMethodByName(env, NULL, "java/lang/System", "load",
"(Ljava/lang/String;)V", "(Ljava/lang/String;)V",
JNU_NewStringPlatform(env, buf)); jbuf);
awtHandle = dlopen(buf, RTLD_LAZY | RTLD_GLOBAL); awtHandle = dlopen(buf, RTLD_LAZY | RTLD_GLOBAL);
......
/* /*
* Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1999, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -175,10 +175,13 @@ Java_sun_awt_X11_XRobotPeer_setup (JNIEnv * env, jclass cls, jint numberOfButton ...@@ -175,10 +175,13 @@ Java_sun_awt_X11_XRobotPeer_setup (JNIEnv * env, jclass cls, jint numberOfButton
num_buttons = numberOfButtons; num_buttons = numberOfButtons;
tmp = (*env)->GetIntArrayElements(env, buttonDownMasks, JNI_FALSE); tmp = (*env)->GetIntArrayElements(env, buttonDownMasks, JNI_FALSE);
CHECK_NULL(tmp);
masks = (jint *)SAFE_SIZE_ARRAY_ALLOC(malloc, sizeof(jint), num_buttons); masks = (jint *)SAFE_SIZE_ARRAY_ALLOC(malloc, sizeof(jint), num_buttons);
if (masks == (jint *) NULL) { if (masks == (jint *) NULL) {
JNU_ThrowOutOfMemoryError((JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2), NULL); (*env)->ExceptionClear(env);
(*env)->ReleaseIntArrayElements(env, buttonDownMasks, tmp, 0); (*env)->ReleaseIntArrayElements(env, buttonDownMasks, tmp, 0);
JNU_ThrowOutOfMemoryError((JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2), NULL);
return; return;
} }
for (i = 0; i < num_buttons; i++) { for (i = 0; i < num_buttons; i++) {
......
/* /*
* Copyright (c) 2004, 2013, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2004, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -98,6 +98,7 @@ jboolean _icon_upcall(JNIEnv *env, jobject this, GdkPixbuf *pixbuf) ...@@ -98,6 +98,7 @@ jboolean _icon_upcall(JNIEnv *env, jobject this, GdkPixbuf *pixbuf)
(*env)->GetObjectClass(env, this)); (*env)->GetObjectClass(env, this));
icon_upcall_method = (*env)->GetMethodID(env, this_class, icon_upcall_method = (*env)->GetMethodID(env, this_class,
"loadIconCallback", "([BIIIIIZ)V"); "loadIconCallback", "([BIIIIIZ)V");
CHECK_NULL_RETURN(icon_upcall_method, JNI_FALSE);
} }
if (pixbuf != NULL) if (pixbuf != NULL)
...@@ -112,6 +113,8 @@ jboolean _icon_upcall(JNIEnv *env, jobject this, GdkPixbuf *pixbuf) ...@@ -112,6 +113,8 @@ jboolean _icon_upcall(JNIEnv *env, jobject this, GdkPixbuf *pixbuf)
/* Copy the data array into a Java structure so we can pass it back. */ /* Copy the data array into a Java structure so we can pass it back. */
jbyteArray data = (*env)->NewByteArray(env, (row_stride * height)); jbyteArray data = (*env)->NewByteArray(env, (row_stride * height));
JNU_CHECK_EXCEPTION_RETURN(env, JNI_FALSE);
(*env)->SetByteArrayRegion(env, data, 0, (row_stride * height), (*env)->SetByteArrayRegion(env, data, 0, (row_stride * height),
(jbyte *)pixbuf_data); (jbyte *)pixbuf_data);
......
/* /*
* Copyright (c) 1995, 2013, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1995, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -76,6 +76,7 @@ awtJNI_ThreadYield(JNIEnv *env) { ...@@ -76,6 +76,7 @@ awtJNI_ThreadYield(JNIEnv *env) {
Boolean err = FALSE; Boolean err = FALSE;
if (threadClass == NULL) { if (threadClass == NULL) {
jclass tc = (*env)->FindClass(env, "java/lang/Thread"); jclass tc = (*env)->FindClass(env, "java/lang/Thread");
CHECK_NULL(tc);
threadClass = (*env)->NewGlobalRef(env, tc); threadClass = (*env)->NewGlobalRef(env, tc);
(*env)->DeleteLocalRef(env, tc); (*env)->DeleteLocalRef(env, tc);
if (threadClass != NULL) { if (threadClass != NULL) {
......
/* /*
* Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -161,17 +161,22 @@ jboolean isDisplayLocal(JNIEnv *env) { ...@@ -161,17 +161,22 @@ jboolean isDisplayLocal(JNIEnv *env) {
if (! isLocalSet) { if (! isLocalSet) {
jclass geCls = (*env)->FindClass(env, "java/awt/GraphicsEnvironment"); jclass geCls = (*env)->FindClass(env, "java/awt/GraphicsEnvironment");
CHECK_NULL_RETURN(geCls, JNI_FALSE);
jmethodID getLocalGE = (*env)->GetStaticMethodID(env, geCls, jmethodID getLocalGE = (*env)->GetStaticMethodID(env, geCls,
"getLocalGraphicsEnvironment", "getLocalGraphicsEnvironment",
"()Ljava/awt/GraphicsEnvironment;"); "()Ljava/awt/GraphicsEnvironment;");
CHECK_NULL_RETURN(getLocalGE, JNI_FALSE);
jobject ge = (*env)->CallStaticObjectMethod(env, geCls, getLocalGE); jobject ge = (*env)->CallStaticObjectMethod(env, geCls, getLocalGE);
JNU_CHECK_EXCEPTION_RETURN(env, JNI_FALSE);
jclass sgeCls = (*env)->FindClass(env, jclass sgeCls = (*env)->FindClass(env,
"sun/java2d/SunGraphicsEnvironment"); "sun/java2d/SunGraphicsEnvironment");
CHECK_NULL_RETURN(sgeCls, JNI_FALSE);
if ((*env)->IsInstanceOf(env, ge, sgeCls)) { if ((*env)->IsInstanceOf(env, ge, sgeCls)) {
jmethodID isDisplayLocal = (*env)->GetMethodID(env, sgeCls, jmethodID isDisplayLocal = (*env)->GetMethodID(env, sgeCls,
"isDisplayLocal", "isDisplayLocal",
"()Z"); "()Z");
JNU_CHECK_EXCEPTION_RETURN(env, JNI_FALSE);
isLocal = (*env)->CallBooleanMethod(env, ge, isDisplayLocal); isLocal = (*env)->CallBooleanMethod(env, ge, isDisplayLocal);
} else { } else {
isLocal = True; isLocal = True;
...@@ -1005,50 +1010,38 @@ Java_sun_font_FontConfigManager_getFontConfig ...@@ -1005,50 +1010,38 @@ Java_sun_font_FontConfigManager_getFontConfig
jmethodID fcFontCons; jmethodID fcFontCons;
char* debugMinGlyphsStr = getenv("J2D_DEBUG_MIN_GLYPHS"); char* debugMinGlyphsStr = getenv("J2D_DEBUG_MIN_GLYPHS");
CHECK_NULL(fcInfoObj);
CHECK_NULL(fcCompFontArray);
jclass fcInfoClass = jclass fcInfoClass =
(*env)->FindClass(env, "sun/font/FontConfigManager$FontConfigInfo"); (*env)->FindClass(env, "sun/font/FontConfigManager$FontConfigInfo");
CHECK_NULL(fcInfoClass);
jclass fcCompFontClass = jclass fcCompFontClass =
(*env)->FindClass(env, "sun/font/FontConfigManager$FcCompFont"); (*env)->FindClass(env, "sun/font/FontConfigManager$FcCompFont");
CHECK_NULL(fcCompFontClass);
jclass fcFontClass = jclass fcFontClass =
(*env)->FindClass(env, "sun/font/FontConfigManager$FontConfigFont"); (*env)->FindClass(env, "sun/font/FontConfigManager$FontConfigFont");
CHECK_NULL(fcFontClass);
if (fcInfoObj == NULL || fcCompFontArray == NULL || fcInfoClass == NULL ||
fcCompFontClass == NULL || fcFontClass == NULL) {
return; CHECK_NULL(fcVersionID = (*env)->GetFieldID(env, fcInfoClass, "fcVersion", "I"));
} CHECK_NULL(fcCacheDirsID = (*env)->GetFieldID(env, fcInfoClass, "cacheDirs",
"[Ljava/lang/String;"));
fcVersionID = (*env)->GetFieldID(env, fcInfoClass, "fcVersion", "I"); CHECK_NULL(fcNameID = (*env)->GetFieldID(env, fcCompFontClass,
"fcName", "Ljava/lang/String;"));
fcCacheDirsID = (*env)->GetFieldID(env, fcInfoClass, "cacheDirs", CHECK_NULL(fcFirstFontID = (*env)->GetFieldID(env, fcCompFontClass, "firstFont",
"[Ljava/lang/String;"); "Lsun/font/FontConfigManager$FontConfigFont;"));
CHECK_NULL(fcAllFontsID = (*env)->GetFieldID(env, fcCompFontClass, "allFonts",
fcNameID = (*env)->GetFieldID(env, fcCompFontClass, "[Lsun/font/FontConfigManager$FontConfigFont;"));
"fcName", "Ljava/lang/String;"); CHECK_NULL(fcFontCons = (*env)->GetMethodID(env, fcFontClass, "<init>", "()V"));
fcFirstFontID = CHECK_NULL(familyNameID = (*env)->GetFieldID(env, fcFontClass,
(*env)->GetFieldID(env, fcCompFontClass, "firstFont", "familyName", "Ljava/lang/String;"));
"Lsun/font/FontConfigManager$FontConfigFont;"); CHECK_NULL(styleNameID = (*env)->GetFieldID(env, fcFontClass,
"styleStr", "Ljava/lang/String;"));
fcAllFontsID = CHECK_NULL(fullNameID = (*env)->GetFieldID(env, fcFontClass,
(*env)->GetFieldID(env, fcCompFontClass, "allFonts", "fullName", "Ljava/lang/String;"));
"[Lsun/font/FontConfigManager$FontConfigFont;"); CHECK_NULL(fontFileID = (*env)->GetFieldID(env, fcFontClass,
"fontFile", "Ljava/lang/String;"));
fcFontCons = (*env)->GetMethodID(env, fcFontClass, "<init>", "()V");
familyNameID = (*env)->GetFieldID(env, fcFontClass,
"familyName", "Ljava/lang/String;");
styleNameID = (*env)->GetFieldID(env, fcFontClass,
"styleStr", "Ljava/lang/String;");
fullNameID = (*env)->GetFieldID(env, fcFontClass,
"fullName", "Ljava/lang/String;");
fontFileID = (*env)->GetFieldID(env, fcFontClass,
"fontFile", "Ljava/lang/String;");
if (fcVersionID == NULL || fcCacheDirsID == NULL || fcNameID == NULL ||
fcFirstFontID == NULL || fcAllFontsID == NULL || fcFontCons == NULL ||
familyNameID == NULL || styleNameID == NULL || fullNameID == NULL ||
fontFileID == NULL) {
return;
}
if ((libfontconfig = openFontConfig()) == NULL) { if ((libfontconfig = openFontConfig()) == NULL) {
return; return;
...@@ -1129,6 +1122,8 @@ Java_sun_font_FontConfigManager_getFontConfig ...@@ -1129,6 +1122,8 @@ Java_sun_font_FontConfigManager_getFontConfig
if (cacheDirs != NULL) { if (cacheDirs != NULL) {
while ((cnt < max) && (cacheDir = (*FcStrListNext)(cacheDirs))) { while ((cnt < max) && (cacheDir = (*FcStrListNext)(cacheDirs))) {
jstr = (*env)->NewStringUTF(env, (const char*)cacheDir); jstr = (*env)->NewStringUTF(env, (const char*)cacheDir);
JNU_CHECK_EXCEPTION(env);
(*env)->SetObjectArrayElement(env, cacheDirArray, cnt++, jstr); (*env)->SetObjectArrayElement(env, cacheDirArray, cnt++, jstr);
} }
(*FcStrListDone)(cacheDirs); (*FcStrListDone)(cacheDirs);
...@@ -1136,6 +1131,11 @@ Java_sun_font_FontConfigManager_getFontConfig ...@@ -1136,6 +1131,11 @@ Java_sun_font_FontConfigManager_getFontConfig
} }
locale = (*env)->GetStringUTFChars(env, localeStr, 0); locale = (*env)->GetStringUTFChars(env, localeStr, 0);
if (locale == NULL) {
(*env)->ExceptionClear(env);
JNU_ThrowOutOfMemoryError(env, "Could not create locale");
return;
}
arrlen = (*env)->GetArrayLength(env, fcCompFontArray); arrlen = (*env)->GetArrayLength(env, fcCompFontArray);
for (i=0; i<arrlen; i++) { for (i=0; i<arrlen; i++) {
......
/* /*
* Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -47,9 +47,6 @@ Java_java_awt_Color_initIDs ...@@ -47,9 +47,6 @@ Java_java_awt_Color_initIDs
(JNIEnv *env, jclass clazz) (JNIEnv *env, jclass clazz)
{ {
colorValueID = (*env)->GetFieldID(env, clazz, "value", "I"); colorValueID = (*env)->GetFieldID(env, clazz, "value", "I");
if(colorValueID == NULL)
JNU_ThrowNullPointerException (env, "Can't get java/awt/Color.value fieldID");
} }
JNIEXPORT void JNICALL JNIEXPORT void JNICALL
......
/* /*
* Copyright (c) 1996, 2011, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1996, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -74,7 +74,7 @@ awtJNI_GetFontDescriptorNumber(JNIEnv * env ...@@ -74,7 +74,7 @@ awtJNI_GetFontDescriptorNumber(JNIEnv * env
jobject temp = NULL; jobject temp = NULL;
jboolean validRet = JNI_FALSE; jboolean validRet = JNI_FALSE;
if ((*env)->EnsureLocalCapacity(env, 2) < 0) if ((*env)->EnsureLocalCapacity(env, 2) < 0 || (*env)->ExceptionCheck(env))
goto done; goto done;
peer = (*env)->CallObjectMethod(env,font,fontIDs.getPeer); peer = (*env)->CallObjectMethod(env,font,fontIDs.getPeer);
...@@ -162,7 +162,7 @@ awtJNI_IsMultiFontMetrics(JNIEnv * env, jobject this) ...@@ -162,7 +162,7 @@ awtJNI_IsMultiFontMetrics(JNIEnv * env, jobject this)
font = JNU_CallMethodByName(env, NULL, this, "getFont_NoClientCode", font = JNU_CallMethodByName(env, NULL, this, "getFont_NoClientCode",
"()Ljava/awt/Font;").l; "()Ljava/awt/Font;").l;
if (JNU_IsNull(env, font)) { if (JNU_IsNull(env, font) || (*env)->ExceptionCheck(env)) {
return JNI_FALSE; return JNI_FALSE;
} }
...@@ -318,6 +318,10 @@ awtJNI_GetMFStringWidth(JNIEnv * env, jcharArray s, int offset, int sLength, job ...@@ -318,6 +318,10 @@ awtJNI_GetMFStringWidth(JNIEnv * env, jcharArray s, int offset, int sLength, job
} }
fdata = awtJNI_GetFontData(env, font, &err); fdata = awtJNI_GetFontData(env, font, &err);
if ((*env)->ExceptionCheck(env)) {
(*env)->DeleteLocalRef(env, dataArray);
return 0;
}
stringCount = (*env)->GetArrayLength(env, dataArray); stringCount = (*env)->GetArrayLength(env, dataArray);
...@@ -336,6 +340,11 @@ awtJNI_GetMFStringWidth(JNIEnv * env, jcharArray s, int offset, int sLength, job ...@@ -336,6 +340,11 @@ awtJNI_GetMFStringWidth(JNIEnv * env, jcharArray s, int offset, int sLength, job
} }
j = awtJNI_GetFontDescriptorNumber(env, font, fontDescriptor); j = awtJNI_GetFontDescriptorNumber(env, font, fontDescriptor);
if ((*env)->ExceptionCheck(env)) {
(*env)->DeleteLocalRef(env, fontDescriptor);
(*env)->DeleteLocalRef(env, data);
break;
}
if (fdata->flist[j].load == 0) { if (fdata->flist[j].load == 0) {
xf = loadFont(awt_display, xf = loadFont(awt_display,
...@@ -356,6 +365,14 @@ awtJNI_GetMFStringWidth(JNIEnv * env, jcharArray s, int offset, int sLength, job ...@@ -356,6 +365,14 @@ awtJNI_GetMFStringWidth(JNIEnv * env, jcharArray s, int offset, int sLength, job
stringData = stringData =
(unsigned char *)(*env)->GetPrimitiveArrayCritical(env, data,NULL); (unsigned char *)(*env)->GetPrimitiveArrayCritical(env, data,NULL);
if (stringData == NULL) {
(*env)->DeleteLocalRef(env, fontDescriptor);
(*env)->DeleteLocalRef(env, data);
(*env)->ExceptionClear(env);
JNU_ThrowOutOfMemoryError(env, "Could not get string data");
break;
}
length = (stringData[0] << 24) | (stringData[1] << 16) | length = (stringData[0] << 24) | (stringData[1] << 16) |
(stringData[2] << 8) | stringData[3]; (stringData[2] << 8) | stringData[3];
offsetStringData = (char *)(stringData + (4 * sizeof(char))); offsetStringData = (char *)(stringData + (4 * sizeof(char)));
......
/* /*
* Copyright (c) 2010, 2012, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2010, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -45,10 +45,12 @@ JNIEXPORT void JNICALL Java_sun_awt_X11_GtkFileDialogPeer_initIDs ...@@ -45,10 +45,12 @@ JNIEXPORT void JNICALL Java_sun_awt_X11_GtkFileDialogPeer_initIDs
filenameFilterCallbackMethodID = (*env)->GetMethodID(env, cx, filenameFilterCallbackMethodID = (*env)->GetMethodID(env, cx,
"filenameFilterCallback", "(Ljava/lang/String;)Z"); "filenameFilterCallback", "(Ljava/lang/String;)Z");
DASSERT(filenameFilterCallbackMethodID != NULL); DASSERT(filenameFilterCallbackMethodID != NULL);
CHECK_NULL(filenameFilterCallbackMethodID);
setFileInternalMethodID = (*env)->GetMethodID(env, cx, setFileInternalMethodID = (*env)->GetMethodID(env, cx,
"setFileInternal", "(Ljava/lang/String;[Ljava/lang/String;)V"); "setFileInternal", "(Ljava/lang/String;[Ljava/lang/String;)V");
DASSERT(setFileInternalMethodID != NULL); DASSERT(setFileInternalMethodID != NULL);
CHECK_NULL(setFileInternalMethodID);
widgetFieldID = (*env)->GetFieldID(env, cx, "widget", "J"); widgetFieldID = (*env)->GetFieldID(env, cx, "widget", "J");
DASSERT(widgetFieldID != NULL); DASSERT(widgetFieldID != NULL);
...@@ -63,6 +65,7 @@ static gboolean filenameFilterCallback(const GtkFileFilterInfo * filter_info, gp ...@@ -63,6 +65,7 @@ static gboolean filenameFilterCallback(const GtkFileFilterInfo * filter_info, gp
env = (JNIEnv *) JNU_GetEnv(jvm, JNI_VERSION_1_2); env = (JNIEnv *) JNU_GetEnv(jvm, JNI_VERSION_1_2);
filename = (*env)->NewStringUTF(env, filter_info->filename); filename = (*env)->NewStringUTF(env, filter_info->filename);
JNU_CHECK_EXCEPTION_RETURN(env, FALSE);
return (*env)->CallBooleanMethod(env, obj, filenameFilterCallbackMethodID, return (*env)->CallBooleanMethod(env, obj, filenameFilterCallbackMethodID,
filename); filename);
...@@ -173,13 +176,14 @@ static jobjectArray toFilenamesArray(JNIEnv *env, GSList* list) ...@@ -173,13 +176,14 @@ static jobjectArray toFilenamesArray(JNIEnv *env, GSList* list)
stringCls = (*env)->FindClass(env, "java/lang/String"); stringCls = (*env)->FindClass(env, "java/lang/String");
if (stringCls == NULL) { if (stringCls == NULL) {
(*env)->ExceptionClear(env);
JNU_ThrowInternalError(env, "Could not get java.lang.String class"); JNU_ThrowInternalError(env, "Could not get java.lang.String class");
return NULL; return NULL;
} }
array = (*env)->NewObjectArray(env, fp_gtk_g_slist_length(list), stringCls, array = (*env)->NewObjectArray(env, fp_gtk_g_slist_length(list), stringCls, NULL);
NULL);
if (array == NULL) { if (array == NULL) {
(*env)->ExceptionClear(env);
JNU_ThrowInternalError(env, "Could not instantiate array files array"); JNU_ThrowInternalError(env, "Could not instantiate array files array");
return NULL; return NULL;
} }
...@@ -189,7 +193,9 @@ static jobjectArray toFilenamesArray(JNIEnv *env, GSList* list) ...@@ -189,7 +193,9 @@ static jobjectArray toFilenamesArray(JNIEnv *env, GSList* list)
entry = (char*) iterator->data; entry = (char*) iterator->data;
entry = strrchr(entry, '/') + 1; entry = strrchr(entry, '/') + 1;
str = (*env)->NewStringUTF(env, entry); str = (*env)->NewStringUTF(env, entry);
(*env)->SetObjectArrayElement(env, array, i, str); if (str && !(*env)->ExceptionCheck(env)) {
(*env)->SetObjectArrayElement(env, array, i, str);
}
i++; i++;
} }
...@@ -215,13 +221,14 @@ static jobjectArray toPathAndFilenamesArray(JNIEnv *env, GSList* list) ...@@ -215,13 +221,14 @@ static jobjectArray toPathAndFilenamesArray(JNIEnv *env, GSList* list)
stringCls = (*env)->FindClass(env, "java/lang/String"); stringCls = (*env)->FindClass(env, "java/lang/String");
if (stringCls == NULL) { if (stringCls == NULL) {
(*env)->ExceptionClear(env);
JNU_ThrowInternalError(env, "Could not get java.lang.String class"); JNU_ThrowInternalError(env, "Could not get java.lang.String class");
return NULL; return NULL;
} }
array = (*env)->NewObjectArray(env, fp_gtk_g_slist_length(list), stringCls, array = (*env)->NewObjectArray(env, fp_gtk_g_slist_length(list), stringCls, NULL);
NULL);
if (array == NULL) { if (array == NULL) {
(*env)->ExceptionClear(env);
JNU_ThrowInternalError(env, "Could not instantiate array files array"); JNU_ThrowInternalError(env, "Could not instantiate array files array");
return NULL; return NULL;
} }
...@@ -236,7 +243,9 @@ static jobjectArray toPathAndFilenamesArray(JNIEnv *env, GSList* list) ...@@ -236,7 +243,9 @@ static jobjectArray toPathAndFilenamesArray(JNIEnv *env, GSList* list)
} }
str = (*env)->NewStringUTF(env, entry); str = (*env)->NewStringUTF(env, entry);
(*env)->SetObjectArrayElement(env, array, i, str); if (str && !(*env)->ExceptionCheck(env)) {
(*env)->SetObjectArrayElement(env, array, i, str);
}
i++; i++;
} }
...@@ -268,16 +277,17 @@ static void handle_response(GtkWidget* aDialog, gint responseId, gpointer obj) ...@@ -268,16 +277,17 @@ static void handle_response(GtkWidget* aDialog, gint responseId, gpointer obj)
if (full_path_names) { if (full_path_names) {
//This is a hack for use with "Recent Folders" in gtk where each //This is a hack for use with "Recent Folders" in gtk where each
//file could have its own directory. //file could have its own directory.
jcurrent_folder = (*env)->NewStringUTF(env, "/");
jfilenames = toPathAndFilenamesArray(env, filenames); jfilenames = toPathAndFilenamesArray(env, filenames);
jcurrent_folder = (*env)->NewStringUTF(env, "/");
} else { } else {
jcurrent_folder = (*env)->NewStringUTF(env, current_folder);
jfilenames = toFilenamesArray(env, filenames); jfilenames = toFilenamesArray(env, filenames);
jcurrent_folder = (*env)->NewStringUTF(env, current_folder);
}
if (!(*env)->ExceptionCheck(env)) {
(*env)->CallVoidMethod(env, obj, setFileInternalMethodID,
jcurrent_folder, jfilenames);
} }
(*env)->CallVoidMethod(env, obj, setFileInternalMethodID, jcurrent_folder,
jfilenames);
fp_g_free(current_folder); fp_g_free(current_folder);
quit(env, (jobject)obj, TRUE); quit(env, (jobject)obj, TRUE);
} }
...@@ -296,11 +306,17 @@ Java_sun_awt_X11_GtkFileDialogPeer_run(JNIEnv * env, jobject jpeer, ...@@ -296,11 +306,17 @@ Java_sun_awt_X11_GtkFileDialogPeer_run(JNIEnv * env, jobject jpeer,
if (jvm == NULL) { if (jvm == NULL) {
(*env)->GetJavaVM(env, &jvm); (*env)->GetJavaVM(env, &jvm);
JNU_CHECK_EXCEPTION(env);
} }
fp_gdk_threads_enter(); fp_gdk_threads_enter();
const char *title = jtitle == NULL? "": (*env)->GetStringUTFChars(env, jtitle, 0); const char *title = jtitle == NULL? "": (*env)->GetStringUTFChars(env, jtitle, 0);
if (title == NULL) {
(*env)->ExceptionClear(env);
JNU_ThrowOutOfMemoryError(env, "Could not get title");
return;
}
if (mode == java_awt_FileDialog_SAVE) { if (mode == java_awt_FileDialog_SAVE) {
/* Save action */ /* Save action */
...@@ -328,6 +344,11 @@ Java_sun_awt_X11_GtkFileDialogPeer_run(JNIEnv * env, jobject jpeer, ...@@ -328,6 +344,11 @@ Java_sun_awt_X11_GtkFileDialogPeer_run(JNIEnv * env, jobject jpeer,
/* Set the directory */ /* Set the directory */
if (jdir != NULL) { if (jdir != NULL) {
const char *dir = (*env)->GetStringUTFChars(env, jdir, 0); const char *dir = (*env)->GetStringUTFChars(env, jdir, 0);
if (dir == NULL) {
(*env)->ExceptionClear(env);
JNU_ThrowOutOfMemoryError(env, "Could not get dir");
return;
}
fp_gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog), dir); fp_gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog), dir);
(*env)->ReleaseStringUTFChars(env, jdir, dir); (*env)->ReleaseStringUTFChars(env, jdir, dir);
} }
...@@ -335,6 +356,11 @@ Java_sun_awt_X11_GtkFileDialogPeer_run(JNIEnv * env, jobject jpeer, ...@@ -335,6 +356,11 @@ Java_sun_awt_X11_GtkFileDialogPeer_run(JNIEnv * env, jobject jpeer,
/* Set the filename */ /* Set the filename */
if (jfile != NULL) { if (jfile != NULL) {
const char *filename = (*env)->GetStringUTFChars(env, jfile, 0); const char *filename = (*env)->GetStringUTFChars(env, jfile, 0);
if (filename == NULL) {
(*env)->ExceptionClear(env);
JNU_ThrowOutOfMemoryError(env, "Could not get filename");
return;
}
if (mode == java_awt_FileDialog_SAVE) { if (mode == java_awt_FileDialog_SAVE) {
fp_gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(dialog), filename); fp_gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(dialog), filename);
} else { } else {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册