[Kaffe] bug found and fixed in Method.java
    Moses DeJong 
    dejong at cs.umn.edu
       
    Thu Jan 14 02:26:46 PST 1999
    
    
  
Hi all.
There is a bug in the java.lang.reflect.Method.equals(Object) method.
Here is a program that shows the bug.
import java.lang.reflect.*;
import java.util.*;
public class HashtableBug {
    public static void main(String[] argv) throws Exception {
	Class[] sig = {String.class};
	Hashtable h = new Hashtable();
	Method m1 =  HashtableBug.class.getMethod("m1", sig);
	Method m2 =  HashtableBug.class.getMethod("m2", sig);
	h.put(m1,"m1");
	h.put(m2,"m2");
	String m;
	m = (String) h.get(m1);
	System.out.println("m is " + m);
	m = (String) h.get(m2);
	System.out.println("m is " + m);
	
    }
    public void m1(String m) {}
    public void m2(String m) {}
}
JDK output
% java HashtableBug
m is m1
m is m2
Kaffe output
% java HashtableBug
java.lang.NullPointerException
        at java/lang/reflect/Method.equals(41)
        at java/util/Hashtable.put(167)
        at HashtableBug.main(14)
Kaffe output with my patch applied
% java HashtableBug
m is m1
m is m2
A patch that fixes this problem
*** cvs/kaffe/libraries/javalib/java/lang/reflect/Method.java   Wed Dec  9 17:20:20 1998
--- Method.java Thu Jan 14 04:15:53 1999
***************
*** 25,33 ****
  
  public boolean equals(Object obj)
        {
!       // Catch the simple case wher they're really the same
!       if ((Object)this == obj) {
                return (true);
        }
  
        Method mobj;
--- 25,37 ----
  
  public boolean equals(Object obj)
        {
!       // Catch the simple case where they're really the same
!       if (this == obj) {
                return (true);
+       }
+       //if obj is null then they are not the same
+       if (null == obj) {
+               return (false);
        }
  
        Method mobj;
Please add this patch to the code in the CVS.
thanks a bunch
mo dejong
dejong at cs.umn.edu
    
    
More information about the kaffe
mailing list