Pass a pointer to JNI_GetCreatedJavaVMs() instead of null
David Holmes
david.holmes at oracle.com
Mon May 7 10:39:40 UTC 2012
On 7/05/2012 7:38 PM, Deven You wrote:
> Hi All,
>
> There is a potential problem in
> jdk/src/share/native/com/sun/java/util/jar/pack/jni.cpp.
>
> (Maybe it is not suitable for posting this on core-lib, anyone could
> tell me which mailing list is prefer?)
>
> L85:
>
> JNI_GetCreatedJavaVMs(&vm, 1, null) in which the 3rd parameter is a
> pointer to an integer. See[1], the latest JNI Invocation API spec does
> not say anything about allowing a null as the last parameter.
The spec doesn't say anything but the implementation does check for
NULL. I think this is a spec issue rather than a code issue (and I think
hotspot-runtime owns the JNI spec so cc'ed). It is common practice for
API's that take pointers like this to say "if buf is not NULL then the
value of XXX is written into buf". Particularly as in this case there
will only ever be at most 1 VM created per-process anyway.
I'm more concerned about the fact that the code doesn't even check if
JNI_GetCreatedVMs returns successfully!
David
-----
> I think it is more reasonable to change null to an integer variable.
> Here is my fix[2]
>
> [1]
> http://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/invocation.html#wp633
>
>
> [2] http://cr.openjdk.java.net/~littlee/ojdk-432/webrev.00/
> <http://cr.openjdk.java.net/%7Elittlee/ojdk-432/webrev.00/>
>
>
> Please review this mail!
>
> Thanks a lot!
>
More information about the core-libs-dev
mailing list