# HG changeset patch # User Dan Creswell # Date 1243066637 -3600 # Node ID 27ca8522be85df12c11614d1969207722edb8deb # Parent 7b620098080532a339425e7db8f6269197e22488 Fix bugs in integrity checking and hashCode. diff -r 7b6200980805 -r 27ca8522be85 src/org/dancres/blitz/mangler/MangledEntry.java --- 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; /**

Represents a packaged up Entry ready for unpacking or passing to the @@ -31,7 +35,7 @@ private boolean isSnapshot; /** - * Set to true in readObject method + * Set to true in readExternal 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;