You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@subversion.apache.org by Byeongcheol Lee <li...@gmail.com> on 2010/05/14 21:14:32 UTC

One JNI Usage Bug in Java binding

Dear Subversion Users:

My JNI bug detector (Jinn) found several bugs in the JavaHL. I'd like
to hear your opinion about the bug before filing all the bugs. The bug
appears the Line 774 in the following slice of source files.

subversion/bindings/javahl/native/CreateJ.cpp
....
   634	jobject
   635	CreateJ::NotifyInformation(const svn_wc_notify_t *wcNotify)
   636	{
....
   754	  static jmethodID add_mid = 0;
....
   757	      add_mid = env->GetMethodID(clazz, "add", "(Ljava/lang/Object;)Z");
....
   774	      env->CallObjectMethod(jranges, add_mid, jrange);
....

The "add" method at Line 757 returns a Java boolean value, but the JNI
function at Line 774 expects that the "add" method returns a Java
reference. This usage violates usage rules in JNI specifcation.

"You should replace type in Call<type>Method with the Java type of the
method you are calling (or use one of the actual method calling
routine names from the table) and replace NativeType with the
corresponding native type for that routine."
[http://java.sun.com/javase/6/docs/technotes/guides/jni/spec/functions.html#wp4256]

I propose the following patch:

Index: subversion/bindings/javahl/native/CreateJ.cpp
===================================================================
--- subversion/bindings/javahl/native/CreateJ.cpp	(revision 944458)
+++ subversion/bindings/javahl/native/CreateJ.cpp	(working copy)
@@ -771,7 +771,7 @@
       if (JNIUtil::isJavaExceptionThrown())
         POP_AND_RETURN_NULL;

-      env->CallObjectMethod(jranges, add_mid, jrange);
+      env->CallBooleanMethod(jranges, add_mid, jrange);
       if (JNIUtil::isJavaExceptionThrown())
         POP_AND_RETURN_NULL;

Regards,
Byeong

Re: One JNI Usage Bug in Java binding

Posted by Mark Phippard <ma...@gmail.com>.
Thanks for the patch.  Would you mind reposting this to the dev@ list?


On Fri, May 14, 2010 at 5:14 PM, Byeongcheol Lee <li...@gmail.com> wrote:
> Dear Subversion Users:
>
> My JNI bug detector (Jinn) found several bugs in the JavaHL. I'd like
> to hear your opinion about the bug before filing all the bugs. The bug
> appears the Line 774 in the following slice of source files.
>
> subversion/bindings/javahl/native/CreateJ.cpp
> ....
>   634  jobject
>   635  CreateJ::NotifyInformation(const svn_wc_notify_t *wcNotify)
>   636  {
> ....
>   754    static jmethodID add_mid = 0;
> ....
>   757        add_mid = env->GetMethodID(clazz, "add", "(Ljava/lang/Object;)Z");
> ....
>   774        env->CallObjectMethod(jranges, add_mid, jrange);
> ....
>
> The "add" method at Line 757 returns a Java boolean value, but the JNI
> function at Line 774 expects that the "add" method returns a Java
> reference. This usage violates usage rules in JNI specifcation.
>
> "You should replace type in Call<type>Method with the Java type of the
> method you are calling (or use one of the actual method calling
> routine names from the table) and replace NativeType with the
> corresponding native type for that routine."
> [http://java.sun.com/javase/6/docs/technotes/guides/jni/spec/functions.html#wp4256]
>
> I propose the following patch:
>
> Index: subversion/bindings/javahl/native/CreateJ.cpp
> ===================================================================
> --- subversion/bindings/javahl/native/CreateJ.cpp       (revision 944458)
> +++ subversion/bindings/javahl/native/CreateJ.cpp       (working copy)
> @@ -771,7 +771,7 @@
>       if (JNIUtil::isJavaExceptionThrown())
>         POP_AND_RETURN_NULL;
>
> -      env->CallObjectMethod(jranges, add_mid, jrange);
> +      env->CallBooleanMethod(jranges, add_mid, jrange);
>       if (JNIUtil::isJavaExceptionThrown())
>         POP_AND_RETURN_NULL;
>
> Regards,
> Byeong
>



-- 
Thanks

Mark Phippard
http://markphip.blogspot.com/