Author: toad
Date: 2008-04-12 15:18:49 +0000 (Sat, 12 Apr 2008)
New Revision: 19240

Modified:
   trunk/freenet/src/freenet/store/BerkeleyDBFreenetStore.java
Log:
We didn't actually verify that the key is the key we expected in fetch()!
For CHKs, this could result in CHKStore.fetch() returning a completely bogus 
key.

Modified: trunk/freenet/src/freenet/store/BerkeleyDBFreenetStore.java
===================================================================
--- trunk/freenet/src/freenet/store/BerkeleyDBFreenetStore.java 2008-04-12 
15:16:09 UTC (rev 19239)
+++ trunk/freenet/src/freenet/store/BerkeleyDBFreenetStore.java 2008-04-12 
15:18:49 UTC (rev 19240)
@@ -1066,6 +1066,20 @@

                                block = callback.construct(data, header, 
routingkey, fullKey);

+                               if(!Arrays.equals(block.getRoutingKey(), 
routingkey)) {
+                                       Logger.normal(this, "Does not verify 
(not the unexpected key), setting accessTime to 0 for : 
"+HexUtil.bytesToHex(routingkey));
+                                       keysDB.delete(t, routingkeyDBE);
+                                       c.close();
+                                       c = null;
+                                       t.commit();
+                                       t = null;
+                                       addFreeBlock(storeBlock.offset, true, 
"Key does not verify");
+                                       synchronized(this) {
+                                               misses++;
+                                       }
+                                       return null;
+                               }
+                               
                                if(!dontPromote) {
                                        storeBlock.updateRecentlyUsed();
                                        DatabaseEntry updateDBE = new 
DatabaseEntry();


Reply via email to