changeset 5:27ca8522be85

Fix bugs in integrity checking and hashCode.
author Dan Creswell <dan.creswell@gmail.com>
date Sat, 23 May 2009 09:17:17 +0100
parents 7b6200980805
children 48228766ed4c
files src/org/dancres/blitz/mangler/MangledEntry.java
diffstat 1 files changed, 22 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/org/dancres/blitz/mangler/MangledEntry.java	Thu May 14 11:10:34 2009 -0400
+++ b/src/org/dancres/blitz/mangler/MangledEntry.java	Sat May 23 09:17:17 2009 +0100
@@ -3,7 +3,11 @@
 import java.io.*;
 
 import com.sun.jini.proxy.MarshalledWrapper;
+import java.util.Collection;
+import java.util.Iterator;
 import net.jini.entry.AbstractEntry;
+import net.jini.io.ObjectStreamContext;
+import net.jini.io.context.IntegrityEnforcement;
 
 /**
    <p>Represents a packaged up Entry ready for unpacking or passing to the
@@ -31,7 +35,7 @@
     private boolean isSnapshot;
 
     /**
-     * Set to <code>true</code> in <code>readObject</code> method
+     * Set to <code>true</code> in <code>readExternal</code> method
      * (called when we're deserialized).  When we unpack the contents using
      * EntryMangler, we check this flag and perform integrity checks if
      * required.
@@ -48,6 +52,21 @@
         new MangledEntry("java.lang.Object", null, new MangledField[0],
             new String[0], true);
 
+    static boolean integrityEnforced(ObjectInput aStream) {
+        if (aStream instanceof ObjectStreamContext) {
+            Collection ctx =
+                    ((ObjectStreamContext) aStream).getObjectStreamContext();
+            for (Iterator i = ctx.iterator(); i.hasNext();) {
+                Object obj = i.next();
+                if (obj instanceof IntegrityEnforcement) {
+                    return ((IntegrityEnforcement) obj).integrityEnforced();
+                }
+            }
+        }
+
+        return false;
+    }
+
     public MangledEntry() {
 
     }
@@ -91,6 +110,7 @@
     public void readExternal(ObjectInput objectInput) throws IOException,
         ClassNotFoundException {
 
+        checkIntegrity = integrityEnforced(objectInput);
         theParents = (String[]) objectInput.readObject();
         theFields = new MangledField[objectInput.readInt()];
 
@@ -197,7 +217,7 @@
         int myHash = 0;
 
         for (int i = 0; i < theFields.length; i++) {
-            myHash ^= theFields.hashCode();
+            myHash ^= theFields[i].hashCode();
         }
 
         return myHash;