jboolean handling in native JDK code - was : RE: 8211163: UNIX version of Java_java_io_Console_echo does not return a clean boolean

Baesken, Matthias matthias.baesken at sap.com
Fri Sep 28 13:44:51 UTC 2018


I found a  few other  places in jdk  code  where     the jboolean  handling looks problematic to me .
Should we change them ?

Best regards, Matthias


other strange pointer/jboolean casts + assignments :
---------------------------------------------------------------------------------

jdk/src/java.desktop/windows/native/libawt/windows/awt_Component.cpp

7123JNIEXPORT jboolean JNICALL
7124Java_sun_awt_windows_WComponentPeer_nativeHandlesWheelScrolling (JNIEnv* env,
7125    jobject self)
7126{

7129    return (jboolean)((intptr_t)AwtToolkit::GetInstance().SyncCall(
7130        (void *(*)(void *))AwtComponent::_NativeHandlesWheelScrolling,
7131        env->NewGlobalRef(self)));


7142JNIEXPORT jboolean JNICALL
7143Java_sun_awt_windows_WComponentPeer_isObscured(JNIEnv* env,
7144    jobject self)
7145{

7150    return (jboolean)((intptr_t)AwtToolkit::GetInstance().SyncCall(
7151        (void*(*)(void*))AwtComponent::_IsObscured,
7152        (void *)selfGlobalRef));


jdk/src/java.desktop/windows/native/libawt/windows/awt_Window.cpp

3907JNIEXPORT jboolean JNICALL Java_sun_awt_windows_WWindowPeer_requestWindowFocus
3908    (JNIEnv *env, jobject self, jboolean isMouseEventCause)
3909{

3917
3918    return (jboolean)((intptr_t)AwtToolkit::GetInstance().SyncCall(
3919        (void*(*)(void*))AwtWindow::_RequestWindowFocus, rfs));



another different one : we might assign "result = context->err_code;"
and err_code  gets potentially  values  0 - 3  
--------------------------------------------
jdk/src/java.base/share/native/libverify/check_code.c


763#define CC_OK 1
764#define CC_VerifyError 0
765#define CC_OutOfMemory 2
766#define CC_ClassFormatError 3
767
768JNIEXPORT jboolean
769VerifyClassForMajorVersion(JNIEnv *env, jclass cb, char *buffer, jint len,
770                           jint major_version)
771{
.................
774    jboolean result = CC_OK;
775    int i;
776    int num_methods;
777    int* code_lengths;
778    unsigned char** code;
779

878        result = CC_OK;
879    } else {
880        result = context->err_code;
881    }

908    return result;
909}


> -----Original Message-----
> From: Baesken, Matthias
> Sent: Freitag, 28. September 2018 14:33
> To: 'Andrew Haley' <aph at redhat.com>; jdk-dev at openjdk.java.net
> Cc: Simonis, Volker <volker.simonis at sap.com>
> Subject: jboolean handling in native JDK code - was : RE: 8211163: UNIX
> version of Java_java_io_Console_echo does not return a clean boolean
> 
> Hi Andrew,  maybe  this  is  another "bad" jboolean handling :
> 
> 
> src/java.desktop/windows/native/libawt/windows/awt_List.cpp
> 
> 1004JNIEXPORT jboolean JNICALL
> 1005Java_sun_awt_windows_WListPeer_isSelected(JNIEnv *env, jobject
> self,
> 1006                                          jint index)
> 1007{
> 1008    TRY;
> 1009
> 1010    SelectElementStruct *ses = new SelectElementStruct;
> 1011    ses->list = env->NewGlobalRef(self);
> 1012    ses->index = index;
> 1013
> 1014    return (jboolean)((intptr_t)AwtToolkit::GetInstance().SyncCall(
> 1015        (void *(*)(void *))AwtList::_IsSelected, ses));
> 
> 
> Shouldn't we better compare  the  pointer to NULL   instead of just  casting ?
> 
> Best regards, Matthias
> 
> 
> > -----Original Message-----
> > From: jdk-dev <jdk-dev-bounces at openjdk.java.net> On Behalf Of
> Andrew
> > Haley
> > Sent: Mittwoch, 26. September 2018 17:52
> > To: jdk-dev at openjdk.java.net
> > Subject: RFR: 8211163: UNIX version of Java_java_io_Console_echo does
> not
> > return a clean boolean
> >
> > Java_java_io_Console_echo looks like this:
> >
> > JNIEXPORT jboolean JNICALL
> > Java_java_io_Console_echo(JNIEnv *env, jclass cls, jboolean on)
> > {
> >     DWORD fdwMode;
> >     jboolean old;
> >     ...
> >     old = (fdwMode & ENABLE_ECHO_INPUT);
> >     ...
> >     return old;
> > }
> >
> > It only works by accident. jboolean is an unsigned byte.
> > ENABLE_ECHO_INPUT on the systems I know of is 0000010, so fdwMode &
> > ENABLE_ECHO_INPUT fits into the result, but only by accident. We
> > should do things properly and return a clean boolean.
> >
> > Note that the Windows version of the code is correct: I assume the
> > UNIX version is an oversight.
> >
> > https://bugs.openjdk.java.net/browse/JDK-8211163
> > http://cr.openjdk.java.net/~aph/8211163/
> >
> > OK?
> >
> > --
> > Andrew Haley
> > Java Platform Lead Engineer
> > Red Hat UK Ltd. <https://www.redhat.com>
> > EAC8 43EB D3EF DB98 CC77 2FAD A5CD 6035 332F A671


More information about the jdk-dev mailing list